2016-01-09 47 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

相关问题