我正在生成一个fish
shell作为后台作业,并从中生成inotifywait
(一个监视指定文件并仅在其更改后才返回的进程)。
但是,稍后在一个未指定的时间点(不能保证inotifywait
已经返回),我将杀死产生inotifywait
的fish
shell。
我的目标是让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
最终返回。
我在linux 4.20.11
上使用fish 3.0.1
。
发布于 2019-02-23 04:35:44
不要在任何需要正常作业控制语义的情况下使用fish。Fish是我用过的最好的交互式shell。几年来,它一直是我的主要登录shell。但它的作业控制一直到第一个版本都被破坏了。为了好玩,你可以这样做:
fish -c 'trap "echo WTF; exit 3" TERM; sleep 666' &
kill (jobs -lp)
您不会看到"WTF“消息,后台的鱼壳也不会终止。现在执行ps waux | grep sleep
并终止睡眠进程。您应该在您的终端上看到"WTF“消息,并且您的交互式shell将报告后台fish已终止。
对于这种情况,最简单的解决方案是对后台脚本使用bash/ksh/sh。
https://stackoverflow.com/questions/54828931
复制相似问题