1
exec'ed但我有一個Perl腳本如下設計:檢查是否分叉的孩子在Perl
my $child_pid = fork;
if(! $child_pid){
# do some stuff...
exec($user_specified_command);
else{
# wait for child to exit
waitpid($child_pid, 0);
}
# Continue with the script
我很感興趣,在當孩子的高管母公司得到一個警報,以便我可以獲得關於$user_specified_command
的一些詳細信息(具體來說,要使用lsof
來確定stdout是否被重定向到常規文件)。其結果將是這樣的:
my $child_pid = fork;
if(! $child_pid){
# do some stuff...
exec($user_specified_command);
else{
# wait until the child exec's
wait_child_exec();
# do some stuff...
# wait for child to exit
waitpid($child_pid, 0);
}
# Continue with the script
我可以循環和grep ps
輸出,直到名稱更改,但似乎EXEC是相當嚴重的事件,有一個更好的辦法。
難道是更容易,如果你交換了孩子和父母的角色?畢竟,家長有孩子的PID,並可以在此基礎上發送信號。 – thb 2012-03-30 19:19:22
如果我期望「這個」進程在exec之前發送信號,那麼操作系統是否有可能還沒有處理exec,並且我的perl可能會過早發生? – ajwood 2012-03-30 19:23:43
是的,完全正確。我應該想到這一點,但沒有。所以,根據你的建議,會發生另一種想法:你能編寫一個'$ user_specified_command'的包裝嗎?包裝器會收到兩個命令行參數:首先,它會接收「this」進程的PID,以便它可以發送所需的信號;第二,它會收到'$ user_specified_command',這樣它就知道它正在包裝哪個命令。如果這不能解決時間問題,那麼我的做法就很糟糕。請指教。 – thb 2012-03-30 19:30:43