[英]perl fork() & exec()
我正在嘗試掌握fork()和exec()的概念,以用於我自己的學習目的。 我正在嘗試使用perl fork作為第二個相同的進程,然后使用它來執行.sh腳本。
如果我使用fork()和exec(),我可以讓.sh腳本與我的perl腳本並行運行嗎? Perl腳本不會等待子進程並繼續執行。 所以我的perl腳本並不關心子進程的輸出,而只關心命令有效並且正在運行。 有點像調用腳本在后台運行。
我是否可以通過某種安全措施來了解子進程是否正確退出?
如果我使用fork()和exec(),我可以讓.sh腳本與我的perl腳本並行運行嗎? [...]有點像調用腳本在后台運行。
是。 Fork&exec實際上是shell在后台運行命令的方式。
我是否可以通過某種安全措施來了解子進程是否正確退出?
是的,使用waitpid()並查看存儲在$?
中的返回值$?
就像提到的@rohanpm一樣, perlipc手冊頁有很多有用的例子說明如何做到這一點。 這是最相關的一個,其中為SIGCHLD
設置信號處理程序(當子SIGCHLD
終止時將發送給父SIGCHLD
)
use POSIX ":sys_wait_h";
$SIG{CHLD} = sub {
while ((my $child = waitpid(-1, WNOHANG)) > 0) {
$Kid_Status{$child} = $?;
}
};
讓waitpid不要等待孩子:
use POSIX qw/ WNOHANG /;
my $st = waitpid $pid, WNOHANG;
如果進程仍在運行,$ st為0,如果收到pid則為pid。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.