1

この質問は前の質問に関連しています: 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ステートメントでこれを行う方法はありますか?

4

1 に答える 1