如何在nohup下放置已经运行的CHILD进程

时间:2012-11-28 19:45:40

标签: bash shell process zsh nohup

我的问题非常类似于How do I put an already-running process under 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 个答案:

答案 0 :(得分: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