首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否在父fish shell进程终止后立即终止子进程?

是否在父fish shell进程终止后立即终止子进程?
EN

Stack Overflow用户
提问于 2019-02-22 22:11:45
回答 1查看 202关注 0票数 1

我正在生成一个fish shell作为后台作业,并从中生成inotifywait (一个监视指定文件并仅在其更改后才返回的进程)。

但是,稍后在一个未指定的时间点(不能保证inotifywait已经返回),我将杀死产生inotifywaitfish shell。

我的目标是让inotifywait在产生它的PPID终止时自动终止。有没有办法做到这一点?

代码语言:javascript
代码运行次数:0
运行
复制
fish -c "inotifywait -qq $somefile && ..." &
# time passes, inotifywait hasn't returned
kill -15 (jobs -lp)
# the fish process is now terminated, but inoyifywait remains

我现在使用的临时技巧是简单地更新正在监视的文件的访问时间(使用诸如touch之类的实用程序),以便inotifywait最终返回。

我在linux 4.20.11上使用fish 3.0.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-23 04:35:44

不要在任何需要正常作业控制语义的情况下使用fish。Fish是我用过的最好的交互式shell。几年来,它一直是我的主要登录shell。但它的作业控制一直到第一个版本都被破坏了。为了好玩,你可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
fish -c 'trap "echo WTF; exit 3" TERM; sleep 666' &
kill (jobs -lp)

您不会看到"WTF“消息,后台的鱼壳也不会终止。现在执行ps waux | grep sleep并终止睡眠进程。您应该在您的终端上看到"WTF“消息,并且您的交互式shell将报告后台fish已终止。

对于这种情况,最简单的解决方案是对后台脚本使用bash/ksh/sh。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54828931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档