如何在linux系统中运行多程序
How to run multi programs in linux system
我正在尝试从 linux 系统上的控制台 运行 代码:三个简单的程序。这是我使用的代码
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <assert.h>
#include <chrono>
#include <thread>
int main(int argc , char *argv[])
{
if(argc != 2) {
fprintf(stderr,"Usage: cpu <string> \n");
exit(1);
}
char *str = argv[1];
while(1){
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
printf("%s\n",str);
}
return 0;
}
我用
编译了代码
gcc -o cpu cpu.c -Wall
我想运行书上说的代码。
prompt> ./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &
[1] 7353
[2] 7354
[3] 7355
[4] 7356
A
B
D
C
A
B
D
C
A
C
B
D
...
现在我得到这样的错误
bob@bobvm:~/codes/OS_3_pieces$ ./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &
bash: syntax error near unexpected token `;'
我的OS环境是Ubuntu20。我猜原因是在Ubuntu系统中运行多进程有不同的方式。但是我没找到。那么如何 运行 代码与显示的书具有相同的输出?
我建议改进你的问题,见上面的评论。
不过,我也提供一个答案。这与Ubuntu无关。它与您的实际代码无关。在 linux shell.
上启动程序有多种方法
./prog
只是启动 prog 然后 returns 到 shell
./prog &
立即启动 prog 和 returns 到 shell -- 而在后台 运行
./prog1 ; ./prog2
启动 prog1,完成后启动 prog2
./prog1 & ./prog2 &
在后台启动 prog1 并立即在后台启动 prog2(所以两者都是 运行 并行)
./prog1 && ./prog2
启动 prog1 并在无错误完成后才启动 prog2
还有一些我没有在这里列出。当然我的例子只是两个程序,数量可以随意。每个程序也可能有参数。
由此看来,你的情况哪里出了问题就很明显了。您不能将 &
和 ;
组合在一起——为了您的目的,您只需要 &
.
我正在尝试从 linux 系统上的控制台 运行 代码:三个简单的程序。这是我使用的代码
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <assert.h>
#include <chrono>
#include <thread>
int main(int argc , char *argv[])
{
if(argc != 2) {
fprintf(stderr,"Usage: cpu <string> \n");
exit(1);
}
char *str = argv[1];
while(1){
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
printf("%s\n",str);
}
return 0;
}
我用
编译了代码gcc -o cpu cpu.c -Wall
我想运行书上说的代码。
prompt> ./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &
[1] 7353
[2] 7354
[3] 7355
[4] 7356
A
B
D
C
A
B
D
C
A
C
B
D
...
现在我得到这样的错误
bob@bobvm:~/codes/OS_3_pieces$ ./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &
bash: syntax error near unexpected token `;'
我的OS环境是Ubuntu20。我猜原因是在Ubuntu系统中运行多进程有不同的方式。但是我没找到。那么如何 运行 代码与显示的书具有相同的输出?
我建议改进你的问题,见上面的评论。
不过,我也提供一个答案。这与Ubuntu无关。它与您的实际代码无关。在 linux shell.
上启动程序有多种方法./prog
只是启动 prog 然后 returns 到 shell./prog &
立即启动 prog 和 returns 到 shell -- 而在后台 运行./prog1 ; ./prog2
启动 prog1,完成后启动 prog2./prog1 & ./prog2 &
在后台启动 prog1 并立即在后台启动 prog2(所以两者都是 运行 并行)./prog1 && ./prog2
启动 prog1 并在无错误完成后才启动 prog2
还有一些我没有在这里列出。当然我的例子只是两个程序,数量可以随意。每个程序也可能有参数。
由此看来,你的情况哪里出了问题就很明显了。您不能将 &
和 ;
组合在一起——为了您的目的,您只需要 &
.