使用 exec -a 来命名进程,但在后台运行它,不受 CTRL-C 的影响

使用 exec -a 来命名进程,但在后台运行它,不受 CTRL-C 的影响

我想从 bash 脚本启动后台进程,但同时给它另一个名称,并使其免受CTRL-的影响C。我尝试了以下方法:

exec -a NiceName java -cp ....long java command line &
tail -f logs/the.log

我希望为该exec进程提供另一个名称,而不仅仅是java.我想在后台启动它,以便能够立即在进程日志上运行 tail 来验证启动。

这一直有效,直到我点击CTRL-C停止脚本/尾部,因为 SIGINT 被传递给java也终止的进程。

我还尝试了(exec ...&) 和的组合(exec ...)&。起作用的是

exec bash -c "java command line escaping hell&"
tail -f logs/the.log

但我希望有办法不逃离地狱。我也尝试过一些事情但disown没有成功。

如果我删除exec,子进程就不受CTRL-的影响C,但我无法给它命名。

答案1

经过更多实验后,我找到了执行此操作的方法:

(trap "" SIGINT; exec -a NiceName java -cp ....long java command line &)
tail -f logs/the.log

忽略SIGINT子 shell 中的 是由execedjava命令继承的。前台运行bash/tail仍然可以用 CTRL-C 终止。

相关内容