父级鱼壳进程终止后是否终止子进程?

时间:2019-02-22 14:11:45

标签: shell process fish

我正在生成一个fish外壳程序作为后台作业,并且从中生成了inotifywait(一个监视指定文件并仅在更改后返回的过程)。

但是,后来在一个未指定的时间点(此时不能保证inotifywait已返回),我正在杀死产生fish的{​​{1}} shell。

我的目标是让inotifywait在产生它的PPID终止时自动终止。有什么办法吗?

inotifywait

我现在正在使用的临时技巧是简单地(使用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返回。

我正在Linux inotifywait上使用fish 3.0.1

1 个答案:

答案 0 :(得分:1)

在期望正常工作控制语义的任何情况下,请勿使用鱼。 Fish是我用过的最好的交互式外壳。几年来,这一直是我的主要登录shell。但是它的工作控制一直被破坏到第一个版本。这样做很有趣:

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

您将不会看到“ WTF”消息,并且背景鱼壳不会终止。现在ps waux | grep sleep,终止睡眠过程。您应该在终端上看到“ WTF”消息,并且交互式外壳将报告背景鱼已终止。

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