如何杀死由kill或kill -9脚本开始的进程产生的所有子进程

用户名

我有一个名为Launcher.sh的外壳脚本,该脚本由Java进程执行。Java进程内部使用ProcessBuilder来执行bash脚本。

在Launcher.sh中,我有以下代码

#!/bin/bash
trap "kill -- -$$ && kill -INT -$PID" SIGINT SIGTERM SIGKILL
bash Process_A.sh &
pid=$!
echo $pid

Process_A脚本将生成另一个名为Process_B的子进程。

当Launcher.sh脚本从其父级Java进程接收到“ kill”命令或“ kill -9”命令时,我想杀死Process_A和Process_B。

因此,我添加了一个trap命令来捕获SIGINT,SIGTERM和SIGKILL中断。但是当我这样做

kill $pid

它只会杀死Process_A,而不会杀死子Process_B。两者具有相同的PGID。

如何正确杀死从launcher.sh脚本生成的所有子进程和孙进程?

这是杀死之前和之后的“ ps j”实际输出。在我的脚本中,执行“ dse spark”,这反过来会产生一个Java进程。我希望在启动脚本获得终止信号时终止此Java进程

root@WeveJobs01:~# ps j
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 2380  2381  2381  2281 pts/1    59265 S        0   0:00 /bin/bash
    1 58917 58916  1152 pts/0     1236 S        0   0:00 bash /usr/bin/dse spark
58917 59041 58916  1152 pts/0     1236 Sl       0   0:07 /usr/lib/jvm/java-8-oracle/jre//bin/java -cp /etc/dse/spark/:/usr/share/dse/dse-
 2381 59265 59265  2281 pts/1    59265 R+       0   0:00 ps j

root@WeveJobs01:~# kill 58917

root@WeveJobs01:~# ps j
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 1152  1235  1235  1152 pts/0     1236 S        0   0:00 sudo -s
 1235  1236  1236  1152 pts/0     1236 S+       0   0:00 /bin/bash
    1 59041 58916  1152 pts/0     1236 Sl       0   0:23 /usr/bin/java -cp /etc/dse/spark/:/usr/share/dse/dse-
 2381 59513 59513  2281 pts/1    59513 R+       0   0:00 ps j

我试过这个..当我执行“ kill pid”时,pid是脚本的那个。进入无限循环时出现细分错误

trap 'echo "Kill All"; kill -TERM -$$' TERM INT
bash child.sh &
PID=$!
wait $PID
trap - TERM INT
wait $PID
EXIT_STATUS=$?
用户名

我需要在trap语句中重置kill -term以防止无限循环。这工作

陷阱“陷阱-INT &&杀死--$$”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Linux

为什么kill -2无法杀死进程?

来自分类Linux

当父进程被“ kill -9”杀死时,子进程也会被杀死吗?

来自分类Java

使用关闭钩子进程杀死jar实例(kill <PID>)后不会被杀死

来自分类Dev

Process.Kill()似乎没有杀死进程

来自分类Dev

如何使用“ kill”和“ grep”组合杀死进程

来自分类Dev

杀死由Bash脚本启动的所有进程

来自分类Dev

使用child.kill('SIGHUP')杀死NodeJS子进程

来自分类Dev

无法使用KILL杀死自己的进程

来自分类Dev

无法使用“ kill -9 <pid>”杀死mysql进程

来自分类Dev

“ kill -INT $ pid”不会杀死进程,但是ctrl + c可以

来自分类Dev

如何使用C ++中的kill函数杀死进程?

来自分类Dev

“ kill <PID>”不是真正的杀死进程,为什么?

来自分类Dev

如何获取脚本生成的所有子进程的列表

来自分类Dev

如何杀死由Java中的进程启动的子进程?

来自分类Dev

如何杀死由子线程启动的进程?

来自分类Dev

当父进程被“ kill -9”杀死时,如何终止子进程

来自分类Dev

XBMCbuntu no gui使用kill -9杀死xbmc之后

来自分类Dev

如何执行所需的功能后终止python2.7进程,同时使用linux kill命令杀死该进程

来自分类Dev

在C ++中,fork and kill不杀死所有子进程

来自分类Dev

如何使kill <tab>显示ps显示的进程

来自分类Dev

我如何在不使用kill的情况下杀死Linux中的进程?

来自分类Dev

杀死与脚本相关的所有进程

来自分类Dev

wget不能用'kill -9'杀死

来自分类Dev

tmux kill-window不会杀死子进程

来自分类Dev

kill -9 $ PPID是否杀死进程?

来自分类Dev

xargs 和 kill 不能一起杀死特定进程

来自分类Dev

无法使用“kill -9”杀死 wget 进程

来自分类Dev

父进程终止后如何杀死所有子进程?

来自分类Dev

如何杀死我的 bash 脚本生成的所有子进程?

Related 相关文章

  1. 1

    为什么kill -2无法杀死进程?

  2. 2

    当父进程被“ kill -9”杀死时,子进程也会被杀死吗?

  3. 3

    使用关闭钩子进程杀死jar实例(kill <PID>)后不会被杀死

  4. 4

    Process.Kill()似乎没有杀死进程

  5. 5

    如何使用“ kill”和“ grep”组合杀死进程

  6. 6

    杀死由Bash脚本启动的所有进程

  7. 7

    使用child.kill('SIGHUP')杀死NodeJS子进程

  8. 8

    无法使用KILL杀死自己的进程

  9. 9

    无法使用“ kill -9 <pid>”杀死mysql进程

  10. 10

    “ kill -INT $ pid”不会杀死进程,但是ctrl + c可以

  11. 11

    如何使用C ++中的kill函数杀死进程?

  12. 12

    “ kill <PID>”不是真正的杀死进程,为什么?

  13. 13

    如何获取脚本生成的所有子进程的列表

  14. 14

    如何杀死由Java中的进程启动的子进程?

  15. 15

    如何杀死由子线程启动的进程?

  16. 16

    当父进程被“ kill -9”杀死时,如何终止子进程

  17. 17

    XBMCbuntu no gui使用kill -9杀死xbmc之后

  18. 18

    如何执行所需的功能后终止python2.7进程,同时使用linux kill命令杀死该进程

  19. 19

    在C ++中,fork and kill不杀死所有子进程

  20. 20

    如何使kill <tab>显示ps显示的进程

  21. 21

    我如何在不使用kill的情况下杀死Linux中的进程?

  22. 22

    杀死与脚本相关的所有进程

  23. 23

    wget不能用'kill -9'杀死

  24. 24

    tmux kill-window不会杀死子进程

  25. 25

    kill -9 $ PPID是否杀死进程?

  26. 26

    xargs 和 kill 不能一起杀死特定进程

  27. 27

    无法使用“kill -9”杀死 wget 进程

  28. 28

    父进程终止后如何杀死所有子进程?

  29. 29

    如何杀死我的 bash 脚本生成的所有子进程?

热门标签

归档