この質問は前の質問に関連しています: perl run background job and force job to finish?
を実行することでバックグラウンド ジョブを正常に強制終了するスクリプトが動作していると思っていましたkill 15, $logger_pid
が、コマンドによって 2 つのジョブが作成されることがわかりました。以下の詳細を参照してください。
#!/usr/bin/perl
use strict;
# Do a background $USER top every minute
my $cmd = "top -b -d 1 -n 300 -u $ENV{USER} >> logfile";
$SIG{CHLD}="IGNORE"; my $logger_pid;
unless ($logger_pid=fork) { exec($cmd); }
# This actually creates two jobs with consecutive PIDs
# $USER 5609 0.0 0.0 63820 1072 pts/9 S 09:42 0:00 sh -c top -b -d 1 -n 300 -u $USER >> logfile
# $USER 5610 0.6 0.0 10860 1216 pts/9 S 09:42 0:00 top -b -d 1 -n 300 -u $USER
# Do something for a while
foreach my $count (1..5) { print "$count\n"; sleep 1; }
# I thought this first kill command was enough
kill 15, $logger_pid;
# This line is needed to kill the child job
kill 15, ($logger_pid+1);
1;
kill 15, ($logger-pid+1)
バックグラウンドジョブを実際に強制終了するのに時間が必要な理由を教えてもらえますか? 単一のkill
ステートメントでこれを行う方法はありますか?