在bash中,我可以通过$获取最后一个子进程的进程ID(pid)!变量.然后我可以在它完成之前终止这个子进程:

(sleep 5) & pid=$!

kill -9 $pid

这与广告一样有效.如果我现在在睡眠后使用更多命令扩展子进程,则在子进程被终止后,sleep命令会继续,即使其他命令永远不会被执行.

作为一个例子,考虑以下内容,它使用ps来旋转子进程并监视其暗杀:

# Start subprocess and get its pid

(sleep 5; echo done) & pid=$!

# grep for subprocess

echo "grep before kill:"

ps aux | grep "$pid\|sleep 5"

# Kill the subprocess

echo

echo "Killing process $pid"

kill -9 $pid

# grep for subprocess

echo

echo "grep after kill:"

ps aux | grep "$pid\|sleep 5"

# Wait for sleep to finish

sleep 6

# grep for subprocess

echo

echo "grep after sleep is finished:"

ps aux | grep "$pid\|sleep 5"

如果我将其保存到名为filename的文件并运行它,我得到这个打印输出:

grep before kill:

username 7464 <...> bash filename

username 7466 <...> sleep 5

username 7467 <...> grep 7464\|sleep 5

Killing process 7464

grep after kill:

username 7466 <...> sleep 5

username 7469 <...> grep 7464\|sleep 5

grep after sleep is finished:

username 7472 <...> grep 7464\|sleep 5

其中来自ps命令的不重要信息被替换为< ...&gt ;.看起来kill已经杀死了文件名的整体bash执行,同时让睡眠运行.

我怎样才能正确杀死整个子进程?

解决方法:

您可以在子shell中设置陷阱以在退出之前终止所有活动作业:

(trap 'kill $(jobs -p)' EXIT; sleep 5; echo done ) & pid=$!

标签:bash,shell,unix,linux,kill

来源: https://codeday.me/bug/20190627/1308654.html

linux kill 子进程6,linux – Bash:杀死子进程中的所有进程相关推荐

  1. linux kill命令信号,linux kill命令详解

    kill 命令的用途 kill 命令很容易让人产生误解,以为它仅仅就是用来杀死进程的.我们来看一下 man page 对它的解释:kill - send a signal to a process. ...

  2. Linux ping命令、Linux kill命令、Linux logname命令、 Linux logout命令

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Linux ping命令用于检测主机. 执行ping指令会使用ICMP传输协议,发出要求回应的信息, ...

  3. linux kill命令信号,Linux kill 命令详解

    Linux kill 命令很容易让人产生误解,以为它仅仅就是用来杀死进程的.我们来看一下 man page 对它的解释:kill - send a signal to a process. 从官方的解 ...

  4. Linux shell 对话框,如何在 Bash Shell 脚本中显示对话框

    原标题:如何在 Bash Shell 脚本中显示对话框 这个教程给出几个如何使用类似zenity和whiptail的工具在Bash Shell 脚本中提供消息/对话框的例子.使用这些工具,你的脚本能够 ...

  5. linux删除最后一个字符串,Bash删除字符串中的第一个和最后一个字符

    问题描述 我有一个这样的字符串: |abcdefg| 我想要得到一个新的字符串(如string2)与原始字符串调用没有两个|在开始和结束时 所以我会有这个 abcdefg 在bash中可能吗? 最佳解 ...

  6. linux空格转义,如何在bash循环列表中转义空格?

    首先,不要这样做.最好的办法是正确使用find -exec: # this is safe find test -type d -exec echo '{}' + 另一个安全的方法是使用NUL终止列表 ...

  7. django为什么需要子进程,如何关闭子进程,linux状态

    django为什么需要子进程 一旦用户用manage.py runserver启动开发服务器,就启动了一个django的进程,当然如果我们用ps aux,这其实是一个Python进程,不过他运行了ma ...

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

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

  9. linux系统fuser命令,linux之fuser命令

    fuser:使用文件或者套节字来表示识别进程.我常用的他的两个功能:查看我需要的进程和我要杀死我查到的进程. 比如当你想umount光驱或者其他文件系统的的时候,结果系统提示你设备正在使用或者正忙,可 ...

最新文章

  1. 实战:基于OpenCV的人眼检测
  2. Ubuntu14.04 python 2.7环境下安装Scrapy
  3. 边工作边刷题:70天一遍leetcode: day 94-1
  4. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
  5. CodeForces - 1285D Dr. Evil Underscores(记忆化搜索+字典树)
  6. 如何用js获取浏览器URL中查询字符串的参数
  7. vcenter服务器修改ip,vcenter服务器默认ip地址
  8. python最简单选课系统作业_python之路——作业:学生选课系统
  9. 百度AI学习:四、自然语言处理-1.词法分析
  10. 网络校时(非NTP)
  11. 烈火如歌手游找回服务器,《烈火如歌》05月02日新服公告:侠肝义胆
  12. K-th Number Poj - 2104 主席树
  13. Python 父与子的编程之旅 第七章答案
  14. 对Json数据的处理(模拟获取数据是来自于本地)
  15. 学豆网学计算机,出题优学生版电脑版
  16. 概率论与数理统计(下)
  17. 安卓实战之登录界面设计
  18. A Game of Thrones(97)
  19. TIFF图像文件(四):LZW压缩
  20. 经典游戏打砖块(粗糙版)

热门文章

  1. 【转】【最小树形图】有向图的最小生成树【朱刘算法】
  2. vue路由异步组件案例
  3. Linux 内核简介
  4. [OC]数据库的使用--数据读取
  5. C# - winform使用Dictionary的时候,程序一闪而过!
  6. 使用过的MySql查询语句[待续...]
  7. [编程之美]饮料供货
  8. spring集成compass中出现的问题和总结
  9. struts2校验框架之Visitor校验器
  10. 直接插入排序、冒泡排序实验详解【数据结构实验报告】