如何生成脚本的n个线程,每个线程都有自己的进程ID?

时间:2016-01-09 20:21:30

标签: php multithreading bash shell

我想开始一个脚本的 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(可从php getmypid()访问)生成每个{?}}?或者他们都会共享相同的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 个答案:

答案 0 :(得分: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脚本在后台运行(异步),请使用&指示bash:

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