私は SSH 経由でリモートでジョブを実行するためのシンプルなシステムを実装しています。私の目標は、ジョブを 内で実行しscreen
、そのすべての出力を記録しscript
、ジョブが終了したときに TypeScript をサーバーにアップロードすることです。ただし、SIGTERM を適切に処理するのに苦労しています (たとえば、リモート マシンがシャットダウンしようとしているとき) 。script
プロセスは SIGTERM を受信しても終了しないためです (代わりに、 内で実行されているプロセスがscript
ゾンビになります)。
次のコマンドを想定します。
script -e -q -c 'ping www.google.com'
killall -TERM script
プロセスに SIGTERM シグナルを送信するには を使用しますがscript
、SIGTERM シグナルがping
(終了する) に渡されるように見えますが、ゾンビ プロセスになり、script
終了しません。
> ps -aux | grep ping
karel 16460 0.0 0.0 10852 2732 pts/2 S+ 12:57 0:00 script -e -q -c ping www.google.com
karel 16461 0.1 0.0 0 0 ? Zs 12:57 0:00 [ping] <defunct>
私の理解が正しければ、ping
プロセスは親プロセスがまだ監視しているためゾンビです。ただし、プロセスの監視を停止し、(TypeScript をフラッシュしながら)正常に終了するscript
ことは可能ですか?script