我有一个名为Launcher.sh的shell脚本,它由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脚本从其父进程接收到“kill”命令或“kill -9”命令时,我想要同时杀死Process_A和Process_B .

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

kill $pid

它只会杀死Process_A,但不会杀死子Process_B . 两者都具有相同的PGID .

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

这是kill之前和之后“ps j”的实际输出 . 在我的脚本里面,我做了“dse spark”,它会产生一个java进程 . 我希望在launcer脚本获取kill信号时杀死这个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

我尝试了这个......当我做“杀死pid”时,pid就是脚本 . 当它进入无限循环时,我得到分段错误

trap 'echo "Kill All"; kill -TERM -$$' TERM INT

bash child.sh &

PID=$!

wait $PID

trap - TERM INT

wait $PID

EXIT_STATUS=$?

java 捕获sigkill,如何杀死由kill或kill -9上的脚本启动的进程生成的所有子进程相关推荐

  1. linux杀死网络,Linux下kill杀死进程详解

    背景:这个Linux下kill命令总是记不住,在此稍作记录,方便查看! 1 杀死进程 1.1 查看进程 此时如果我想杀了火狐的进程就在终端输入: $ kill -s 9 1827 其中-s 9 制定了 ...

  2. ps -aux|grep java| grep -v grep | awk ‘{print $2}‘| xargs kill -9

    ps -aux|grep java| grep -v grep | awk '{print $2}'| xargs kill -9

  3. kill和kill -9

    kill和kill -9 很多时候,会有人建议你,如果kill杀不掉一个进程,就用kill -9. 为什么? kill是Linux下常见的命令.其man手册的功能定义如下: kill – send a ...

  4. kill 和 kill -9 的区别

    原文地址:    https://www.cnblogs.com/aspirant/p/11543456.html https://www.cnblogs.com/aspirant/ 进程状态转换图 ...

  5. linux常用命令kill-9,【Linux常用命令】Linux kill, killall, kill -9,

    kill + PID kill -9 + PID  加上-9 是强制终止的信号 killall 是直接加进程名(但是进程名一定要完整) 就能杀掉这些进程 1) 查看进程的方法: ps -ef  或者  ...

  6. kill 和 kill -9

    kill 和 kill -9 很多时候,会有人建议你,如果kill杀不掉一个进程,就用kill -9. 为什么? kill是Linux下常见的命令.其man手册的功能定义如下: kill – send ...

  7. aix shell脚本 运行java_IBM AIX shell脚本启动java程序不成功

    今天写了个很简单的java程序启动脚本,放在/usr/jspider/下面,直接cd到/usr/jspider下面可以正常运行.而通过chkconfig注册为服务后,servicemyserverst ...

  8. JAVA的学习心路历程之JDK基础入门(上)

    任务需要,需要我学java调用linux下的动态库,于是搜寻java知识更新这篇. 从我上大学起我就听别人说JAVA,不不,应该是初中,那时候流行带键盘的智能手机,里面有好些个游戏都是JAVA写的,可 ...

  9. kill -INT kill -9

    kill -INT $pid将"中断"信号发送到具有进程ID的进程pid.然而,该过程可以决定忽略该信号,或者在退出和/或忽略它之前捕获信号并做某事. kill -9 $pid发送 ...

最新文章

  1. 2019第四周作业(基础作业+挑战作业)
  2. 自学python找工作工资-大四应届毕业生,学了两个月Python,找工作感觉好难啊?...
  3. javascript对页面简单的加密和解密
  4. E 做任务三(区间)
  5. Oracle入门(七B)之表空间删除数据文件未删除
  6. CoreOS coreos-assembler文档
  7. 企业IT构建核心基础架构解决方案
  8. Linux安装weblogic报错“u01/app/oraInventory/“ cannot read/execute
  9. 微信小程序项目实例——飞机大战
  10. I2C总线中8bit和10bit有什么区别
  11. 便签纸文字提示ui布局css3
  12. VBS调用ping检测ip连通情况
  13. 彻底解决spring mvc XSS漏洞问题(包括json的格式的入参和出参)
  14. JAVA-【1】配置
  15. ruby gem 安装mysql2_如何在不安装 mysql 数据库的情况下安装 mysql2gem 包
  16. YY客网络广播 内测进行中!
  17. 直播 | 骞云科技DevOps实践
  18. STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记三(1):Cortex-M3指令集概要
  19. 【转】专家推荐 13个优秀的UML建模工具软件
  20. iOS中更新版权 Copyright

热门文章

  1. Android使用usb线传输大文件笔记
  2. 紫砂壶的起源 计算机操作题,紫砂壶的起源与历史发展
  3. python将图片转换成动漫,python实现图片转换成素描和漫画格式
  4. 如何打开.epub格式的电子书?
  5. linux输入法大小,推荐linux下的输入法--五笔+拼音
  6. 阿里云大数据平台DataWorks(原DataX)
  7. 单身女生看过来:你为什么没有男朋友的20个原因
  8. Echarts 当Y轴取值存在正负值的时候,x轴文字与x轴贴合(不在底部显示)
  9. 如何衡量和分配广告渠道?
  10. 输入账号 密码 实现登录功能