【问题标题】:How to run multi programs in linux system如何在linux系统中运行多程序
【发布时间】:2022-01-14 12:11:35
【问题描述】:

我正在尝试从 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 `;'

我的操作系统环境是 Ubuntu 20。我猜原因是在 Ubuntu 系统中运行多进程的方式不同。但我没有找到。那么如何运行代码以得到与显示的书相同的输出呢?

【问题讨论】:

  • 请移除你的通用头文件,不要使用 Spin 函数,而是使用 #include #include std::this_thread::sleep_for(std::chrono::milliseconds(1000)) ;

标签: ubuntu operating-system


【解决方案1】:

我建议改进你的问题,见上面的 cmets。

不过,我也提供了一个答案。这与 Ubuntu 无关。它与您的实际代码无关。您可以通过多种方式在 linux shell 上启动程序。

  • ./prog 只是启动 prog 然后返回 shell
  • ./prog &amp; 启动 prog 并立即返回到 shell -- 当它在后台运行时
  • ./prog1 ; ./prog2 启动 prog1,完成后启动 prog2
  • ./prog1 &amp; ./prog2 &amp; 在后台启动 prog1 并立即在后台启动 prog2(因此两者并行运行)
  • ./prog1 &amp;&amp; ./prog2 启动 prog1 并在没有错误的情况下完成,然后启动 prog2

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

从这里,很明显你的情况出了什么问题。您不能将&amp;; 组合在一起——出于您的目的,您只需要&amp;

【讨论】:

  • 或者你可以开3个终端
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 2021-05-15
  • 2020-04-10
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多