我正试图在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("%sn",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系统中有一种不同的方式来运行多进程。但我没有找到。那么,如何运行代码以获得与所显示的书相同的输出呢?
我建议改进您的问题,请参阅上面的评论。
然而,我也提供了一个答案。这与Ubuntu无关。它与您的实际代码无关。有多种方法可以在linux shell上启动程序。
./prog
只是启动prog,然后返回shell./prog &
启动prog并立即返回shell——当它在后台运行时./prog1 ; ./prog2
启动prog1,完成后启动prog2./prog1 & ./prog2 &
在后台启动prog1,在后台立即启动prog2(因此两者并行运行(./prog1 && ./prog2
启动prog1,当完成时没有错误ONLY,然后启动prog2
还有其他我没有在这里列出的。当然,我的例子只是针对两个程序,数字可以是任意的。此外,每个程序都可以具有参数。
从这一点来看,你的情况很明显出了什么问题。您不能将&
和;
组合在一起——出于您的目的,您只需要&
。