2012-11-28 47 views
1

我的问题是非常相似发表于:How do I put an already-running process under nohup?如何把一个已经运行的子进程下的nohup

说我从我的命令行执行foo.sh,它反过来执行另一个shell脚本,等等。例如:

foo.sh 
\_ bar.sh 
    \_ baz.sh 

现在我按下Ctrl + Z来暂停“foo.sh”。它被列在我的“jobs -l”中。

我该如何否认baz.sh,使其不再是foo.sh的孙子?如果我输入“disown”,那么只有foo.sh不能从其父母那里获得,这并不是我想要的。我想杀掉foo.sh和bar.sh进程,只留下baz.sh.

我目前的解决方法是“杀死-18”(恢复)baz.sh并继续我的工作,但我宁愿杀死上述过程。谢谢。

回答

1

使用ps得到bar.sh的PID,并杀死它。

imac:barmar $ ps -l -t p0 -ww 
    UID PID PPID  F CPU PRI NI  SZ RSS WCHAN  S  ADDR TTY   TIME CMD 
    501 3041 3037  4006 0 31 0 2435548 760 -  Ss 8c6da80 ttyp0  0:00.74 /bin/bash --noediting -i 
    501 68228 3041  4006 0 31 0 2435544 664 -  S  7cbc2a0 ttyp0  0:00.00 /bin/bash ./foo.sh 
    501 68231 68228  4006 0 31 0 2435544 660 -  S  c135a80 ttyp0  0:00.00 /bin/bash ./bar.sh 
    501 68232 68231  4006 0 31 0 2435544 660 -  S  a64b7e0 ttyp0  0:00.00 /bin/bash ./baz.sh 
    501 68233 68232  4006 0 31 0 2426644 312 -  S  f9a1540 ttyp0  0:00.00 sleep 100 
    0 68243 3041  4106 0 31 0 2434868 480 -  R+ a20ad20 ttyp0  0:00.00 ps -l -t p0 -ww 
imac:barmar $ kill 68231 
./foo.sh: line 3: 68231 Terminated    ./bar.sh 
[1]+ Exit 143    ./foo.sh 
imac:barmar $ ps -l -t p0 -ww 
    UID PID PPID  F CPU PRI NI  SZ RSS WCHAN  S  ADDR TTY   TIME CMD 
    501 3041 3037  4006 0 31 0 2435548 760 -  Ss 8c6da80 ttyp0  0:00.74 /bin/bash --noediting -i 
    501 68232  1  4006 0 31 0 2435544 660 -  S  a64b7e0 ttyp0  0:00.00 /bin/bash ./baz.sh 
    501 68233 68232  4006 0 31 0 2426644 312 -  S  f9a1540 ttyp0  0:00.00 sleep 100 
    0 68248 3041  4106 0 31 0 2434868 480 -  R+ 82782a0 ttyp0  0:00.00 ps -l -t p0 -ww 
相关问题