我想从 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 中的 是由exec
edjava
命令继承的。前台运行bash
/tail
仍然可以用 CTRL-C 终止。