更新:編輯以使問題更容易理解。在Perl中運行後臺進程
我正在創建一個腳本,它會自動分析HTTP上載文件,並將上傳文件的信息(如名稱,上載時間)存儲到另一個數據文件中。這些信息可以在mod_security日誌文件中找到。 mod_security有一個規則,我們可以將上傳的文件重定向到Perl腳本。在我的情況下,Perl腳本是upload.pl。在這個Perl腳本中,我將使用ClamAV防病毒掃描上傳的文件。但mod_sec只會記錄上傳的文件信息,如名稱,Perl腳本upload.pl執行後的上傳時間。但是我正在用execute.pl中的sleep(10)從upload.pl啓動另一個perl腳本execute.pl。目的是execute.pl只有在upload.pl完成後才能啓動它的功能。我需要執行execute.pl作爲後臺進程,並且upload.pl應該完成而不會等待execute.pl的輸出。
但我的問題是,我已經使execute.pl在後臺運行,HTTP上傳等待execute.pl的完成,即使我已經使進程在後臺執行。我需要upload.pl才能完成,而不必等待execute.pl的輸出。該腳本在控制檯中運行良好。例如,我從控制檯執行perl upload.pl,完全執行upload.pl而不等待execute.pl的輸出。但是當我通過apache嘗試相同的時候,這意味着當我上傳示例文件時,upload.pl和execute.pl都會上傳完成。由於execute.pl已經作爲後臺進程從upload.pl中調用,所以上傳過程應該完成而不需要等待execute.pl的輸出。
我已經試過的方法至今都
system("cmd &")
my $pid = fork();
if (defined($pid) && $pid==0) {
# background process
my $exit_code = system($command);
exit $exit_code >> 8;
}
my $pid = fork();
if (defined($pid) && $pid==0) {
exec($command);
}
你問題很難理解!你告訴我們某個文件的名字,但是再也不會引用它,並且你指的是「第一個文件」和「第二個文件」,但從不說哪個是哪個文件。您引用了一個「執行某些事情」的腳本,並告訴我們您將獲得「控制檯訪問」權限,但不是您想要的,也不是您需要「記錄器記錄日誌」的原因。 –
@mark我做了更改 – Nijin
不知道你在問什麼。你說你的問題是你讓一些進程等待你的兩個腳本完成執行。如果這確實是你的問題,那麼它的答案似乎是「然後拿出你要做的代碼!」但我懷疑這根本不是你的問題。 – ikegami