Job-IDs auflisten (statt Prozess-IDs)

3167
Zardoz

Der Shell-Befehl jobsunterstützt eine -pOption, um nur die Liste der Prozess-IDs abzurufen. Gibt es eine einfache Möglichkeit, nur eine Liste von Job-IDs zu erhalten? (Ich weiß, dass es so ist, aber ich bin (noch) nicht wirklich ein Shell-Typ).

Dies wäre sehr praktisch kill, da das Töten einer Job-ID anstelle einer Prozess-ID auch alle untergeordneten Prozesse zu töten scheint.

3

2 Antworten auf die Frage

4
glenn jackman

Sie können so etwas tun:

# create some background jobs sleep 10 & sleep 10 & sleep 10 & sleep 10 &  jobs | awk -F '[][]' '' 

Das wird wiederkommen

%1 %2 %3 %4 

Ich nehme an, was Sie suchen.

3
Mikel

Dies wäre sehr praktisch für kill, da das Töten einer Job-ID anstelle einer Prozess-ID auch alle untergeordneten Prozesse zu töten scheint.

Sie können dies auf andere Weise tun.

Wenn die PID gedruckt wird, können Sie sie und alle ihre Kinder töten, indem Sie ihre Prozessgruppe töten .

Sie tun dies, indem Sie die PID negieren, z

$ cat & [1] 21273 $ kill -- -21273 

Du musst schreiben --oder -pidwird als Signal interpretiert (zB like kill -9).

Beispiel:

$ man ls & [1] 22267  $ ps j | head -1; ps j | grep 22267 PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 18968 22267 22267 18968 pts/2 22327 T 500 0:00 man ls 22267 22281 22267 18968 pts/2 22327 T 500 0:00 /bin/sh /usr/bin/nroff -mandoc -Tutf8 22267 22282 22267 18968 pts/2 22327 T 500 0:00 less 22281 22286 22267 18968 pts/2 22327 T 500 0:00 groff -mtty-char -Tutf8 -mandoc 22286 22287 22267 18968 pts/2 22327 T 500 0:00 troff -mtty-char -mandoc -Tutf8 22286 22288 22267 18968 pts/2 22327 T 500 0:00 grotty  $ kill -- -22267 [1]+ Terminated man ls  $ ps j | grep 22267  $