簡體   English   中英

perl fork()&exec()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM