只要亲鱼shell进程终止终止子进程?(Terminate child process as soo

2019-10-31 08:03发布

我一个产卵fish贝作为后台作业,并从它我产卵inotifywait (即手表一个指定的文件,并只返回一旦被改变的过程)。

后来,然而,在时间未指定点(此时它不能保证inotifywait回来了),我杀fish是催生壳inotifywait

我的目标是inotifywait到就会自动终止作为产生它终止PPID。 有没有办法做到这一点?

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会终于回归。

我使用的是鱼3.0.1在Linux 4.20.11

Answer 1:

不要用鱼,其中正常作业控制语义预期的任何情况。 鱼是我用过的最好的交互shell。 它已经好几年我的主要登录shell。 但它的作业控制已被打破回到第一个版本的所有道路。 为了好玩,这样做:

fish -c 'trap "echo WTF; exit 3" TERM; sleep 666' &
kill (jobs -lp)

你不会看到“WTF”消息,并且转到后台鱼外壳将不会终止。 现在ps waux | grep sleep ps waux | grep sleep和杀灭休眠进程。 您应该看到在终端上的“跆拳道”的消息,你的交互shell将报告的背景鱼已经终止。

对于这种情况最简单的解决方法就是使用bash / KSH / SH为背景执行脚本。



文章来源: Terminate child process as soon as the parent fish shell process terminates?