2010-02-08 41 views
5

我是bashLinux的新手。 我有一个我写过的程序,我想创建多个同时发生的实例。如何创建一个创建程序的40个同时实例的bash脚本?

现在,我通过开辟10级新的终端,然后运行程序10次做到这一点(我运行的命令是php /home/calculatedata.php

什么是做到这一点使用bash脚本的最简单的方法是什么? 还,我需要知道如何杀死实例,因为他们正在运行一个无限循环

谢谢!

回答

5

您可以在后台使用循环和启动过程与&

for ((i=0; i<40; i++)); do 
    php /home/calculatedata.php & 
done 

如果这些进程是你已经运行PHP的唯一实例,并要杀死他们,最简单的方法是killall

killall php 
+0

所以在这种情况下,程序是“PHP”? – chris 2010-02-08 07:02:05

+0

@chris:是的,这将是PHP的脚本名称作为参数。 (我更新了他的回答) – sth 2010-02-08 07:05:44

+0

感谢您的帮助! – chris 2010-02-08 07:07:04

3

如何在后台运行的PHP程序:

#!/bin/bash 
for ((i=1;i<=40;i+=1)); do 
    php /home/calculatedata.php & 
done 

可以通过发出终止这些后台运行PHP程序的所有实例:

killall php 

确保你没有任何其他的PHP进程正在运行,因为它们也会被杀死。 如果你有很多其他的PHP程序,那么你就这样做:

ps -ef | grep /home/calculatedata.php | cut_the_pid | kill -9 
1

您可以启动实例用一个简单的循环,并终止“&”,以在后台运行的每个作业:

INSTANCES=40 
for ((i=0; $i<$INSTANCES; ++i)) 
do 
    mycmd & 
done 
+0

谢谢,是否有一种简单的方法来一次终止脚本的所有实例? – chris 2010-02-08 07:01:32

2
for instance in {1..40} 
do 
    php myscript & 
done 
+2

+1使用大括号扩展 – 2010-02-08 07:56:34

0

如果你有SEQ(1)程序(可能你拥有它),你可以在一个稍微更可读的方式做到这一点,就像这样:

for n in $(seq 40); do 
    mycmd & 
done 

在这种情况下,不使用n变量。 希望这有助于

T

+0

您可以使用大括号扩展来模拟seq。 {1..40} – ghostdog74 2010-02-08 07:42:31

+0

当我说“更具可读性”时,我的意思是比C-for循环更具可读性。当然,{1..40}的表单至少可以读取。 – Tjunier 2010-02-08 07:44:59

相关问题