我正在生成一个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
。
答案 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。