如何在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

还有一些我没有在这里列出。当然我的例子只是两个程序,数量可以随意。每个程序也可能有参数。

由此看来,你的情况哪里出了问题就很明显了。您不能将 &; 组合在一起——为了您的目的,您只需要 &.