我的bash脚本旨在重复启动程序,并在执行大约KILL_EVERY秒后将其关闭。问题是我用CTRL + C停止了脚本,它留下了实例化的最后一个进程。
我尝试为SIGINT设置陷阱并杀死进程$ ID,但是发生的是循环中断。我怀疑这是因为陷阱在第一个$ PROGRAM被首先杀死后会以某种方式激活,并杀死下一个实例(如果存在)。
如何解决该问题,以便脚本重复启动,等待KILL_EVERY秒然后杀死$ PROGRAM,但是在CTRL + C上不会使$ PROGRAM实例在后台运行?
[XXX@XXXX ~]$ sudo service gitlab restart
Starting both the GitLab Unicorn and Sidekiq/home/git/gitlab/config/unicorn.rb
/usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/rubygems/ext/builder.rb:212:in `initialize': Permission denied @ rb_sysopen - /usr/local/rvm/gems/ruby-2.2.5/extensions/x86_64-linux/2.1.0/bcrypt-3.1.11/gem_make.out (Errno::EACCES)
答案 0 :(得分:-1)
您可以这样做:
trap 'kill -HUP -$$; exit' SIGINT
KILL_EVERY=${1:-0}
PROGRAM=path/to/program
if [ $KILL_EVERY -gt 0 ]; then
while true ; do
$PROGRAM & ID=$!
sleep $KILL_EVERY
kill -9 $ID
done
else
exec $PROGRAM
fi
这样做ctrl+c
会杀死进程组中的所有内容。