我正在運行一個perl腳本,它執行邏輯檢查,並且如果滿足某些條件。示例:如果超過了一定的時間長度,我想在運行另一個更新該數據的腳本的linux服務器上運行system()命令。更新文件的腳本需要10-15秒,並且必須經過當前文件數量,但在該月份的高峯時段可能長達30秒。Perl調用系統命令並同時保持腳本運行
我想讓perl腳本運行,如果它必須運行system()命令,我不希望它在完成腳本的其餘部分之前等待system()完成。什麼是最好的方式去做這件事?
謝謝
我正在運行一個perl腳本,它執行邏輯檢查,並且如果滿足某些條件。示例:如果超過了一定的時間長度,我想在運行另一個更新該數據的腳本的linux服務器上運行system()命令。更新文件的腳本需要10-15秒,並且必須經過當前文件數量,但在該月份的高峯時段可能長達30秒。Perl調用系統命令並同時保持腳本運行
我想讓perl腳本運行,如果它必須運行system()命令,我不希望它在完成腳本的其餘部分之前等待system()完成。什麼是最好的方式去做這件事?
謝謝
系統運行在shell命令,所以你可以使用所有的外殼功能,包括作業控制。因此,只要在你的命令的末尾這樣堅持&:
system "sleep 30 &";
由於發表日期,不打算是雙關語,但要小心殭屍! 這有點棘手,詳情請參閱perlipc。 但是,據我瞭解您的問題,您不需要維護更新程序和調用程序進程之間的任何關係。在這種情況下,更容易只是「射後不理」:
use strict;
use warnings qw(all);
use POSIX;
# fork child
unless (fork) {
# create a new session
POSIX::setsid();
# fork grandchild
unless (fork) {
# close standard descriptors
open STDIN, '<', '/dev/null';
open STDOUT, '>', '/dev/null';
open STDERR, '>', '/dev/null';
# run another process
exec qw(sleep 10);
}
# terminate child
exit;
}
在這個例子中,sleep 10
不屬於進程的組了,所以甚至殺害父進程將不會影響孩子。
運行在Perl外部程序(包括運行後臺進程),能否請您包括您到目前爲止所做的事,一些示例代碼,一個很好的教程?在給定的問題上提供儘可能多的信息是有幫助的,另外它還向其他人證明在問問題之前您已經做了一些盡職調查。 – slm