ruby – 为什么我的TERM没被捕获
发布时间:2020-12-16 23:02:44 所属栏目:百科 来源:网络整理
导读:我有这个示例代码: pid = Process.spawn("exec ruby -e "trap('TERM'){ puts 'GOT TERM'; sleep 100; }; sleep 100"")Thread.new do Process.wait(pid)endp `ps aux | grep #{pid} | grep -v grep``kill -TERM #{pid}`sleep 1p `ps aux | grep #{pid} | g
我有这个示例代码:
pid = Process.spawn("exec ruby -e "trap('TERM'){ puts 'GOT TERM'; sleep 100; }; sleep 100"") Thread.new do Process.wait(pid) end p `ps aux | grep #{pid} | grep -v grep` `kill -TERM #{pid}` sleep 1 p `ps aux | grep #{pid} | grep -v grep` 它产生一个捕获TERM的进程,然后向它发送一个TERM. 麻烦的是,TERM没有被捕获,过程只是终止. ruby test.rb "sam 8828 0.0 0.0 30576 5052 pts/9 Rl+ 11:48 0:00 ruby -e trap('TERM'){ puts 'GOT TERM'; sleep 100; }; sleep 100n" "" 但是……如果我只是在spawn之后睡觉并从另一个进程发出kill,则会按预期捕获TERM. pid = Process.spawn("exec ruby -e "trap('TERM'){ puts 'GOT TERM'; sleep 100; }; sleep 100"") Thread.new do Process.wait(pid) end puts pid sleep 100 其他外壳 kill -TERM PID 产量 GOT TERM 更进一步,如果我尝试在陷阱处理器TERM将不再杀死它之后从原始进程中终止该进程. 这里发生了什么,为什么TERM没有从父母那里正确地送到我的孩子的过程? 解决方法
啊,我明白了,
在Ruby解释器能够建立挂钩之前,TERM被过早地发送到进程.所以它终止了它. 在杀死之前睡眠1 -TERM#{pid}对问题进行排序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |