2016-01-09 81 views
0

我想開始n腳本的線程,每個腳本都有自己的進程ID。如何產生一個腳本的n個線程,每個腳本都有自己的進程ID?

我目前通過cronjob做到這一點,像這樣:

* * * * * php /path/to/script.php >> /log/script.log 2>&1 
* * * * * php /path/to/script.php >> /log/script.log 2>&1 
* * * * * php /path/to/script.php >> /log/script.log 2>&1 

這三個線程都登錄到同一script.log,其中對輸出其pid

如何在不從腳本複製/粘貼的情況下執行相同操作?

以下會產生不同的pid(可從phpgetmypid()訪問)嗎?或者他們都會共享相同的script-launcher.sh pid?

#!/bin/bash 
# Let's call this `script-launcher.sh` 
# Launch 3 threads at once with `script-launcher.sh 3` 

N=${1-0} 
for i in {1..$N} 
do 
    php /path/to/script.php >> /log/script.log 2>&1 
done 
+1

所有正在運行的進程都有一個唯一的PID。 – pvg

+0

我是否理解你說,使用上面的例子,'script-launcher.sh 100'會產生100個'script.php'進程,每個進程都有自己的'pid'? – Ryan

+0

我認爲這可以幫助你http://stackoverflow.com/questions/19543139/bash-script-processing-commands-in-parallel你想爲你的腳本開始更多的並行過程嗎?當你開始一個過程時,他會自動採取一個pid。 – Laurentiu

回答

1

每當您跨越一個新進程時,新進程將獲得一個新的pid。因此,在這種情況下,每當shell腳本跨越php的一個實例時,php的每個副本都將擁有自己的pid。

的{1 .. $ N}語法是行不通的,雖然如此,你需要你的腳本改爲

N=${1-0} 
for i in $(seq 1 $N) 
do 
    php /path/to/script.php >> script.log 2>&1 
done 

然後,如果你打電話給你的腳本script-launcher.sh 42,你會得到42運行PHP的實例。

要讓你的PHP腳本在後臺(異步)運行時,指示慶典與&這麼:

php /path/to/script.php >> script.log 2>&1 & 
+0

我怎樣才能異步運行這些?它看起來像循環中的每個進程首先等待前一個完成。 – Ryan

+1

@Ryan我更新瞭如何做到這一點的答案。 (在命令的末尾添加一個'&'。) – jbafford

相關問題