如何在 Linux 中同时运行多个 shell 命令
How to run multiple shell command at the same time in linux
我正在尝试同时使用 c++ 代码在 ubuntu 中运行多个命令。 我使用system()
调用来运行多个命令,但system()
调用的问题是它一次只调用一个命令,其余命令正在等待中。 下面我写了我的示例代码,愿这可以帮助您了解我想要做的事情。 最重要的是我想一次运行所有这些命令,而不是一个接一个。请帮助我。
提前谢谢。
main()
{
string command[3];
command[0]= "ls -l";
command[1]="ls";
command[2]="cat main.cpp";
for(int i=0;i<3;i++){
system(command[i].c_str());
}
}
你应该阅读Advanced Linux Programming(有点旧,但免费提供(。您可能想要(以传统方式,就像大多数 shell 一样(:
-
也许捕获
SIGCHLD
(在fork
之前设置信号处理程序,请参阅Signal(7(和Signal-Safety(7(...( -
调用 fork(2( 创建一个新进程。请务必检查所有三种情况(返回
pid_t
为负的失败、pid_t
为 0 的子项、pid_t
为正的父级(。如果要与该进程通信,请使用 pipe(2( (阅读有关 pipe(7(...(在fork
之前. -
在子进程中,关闭一些无用的文件描述符,然后运行一些
exec
函数(或底层 execve(2((来运行所需的程序(例如/bin/ls
( -
调用(在父级中,也许在获得
SIGCHLD
之后(wait(2(或waitpid(2(或相关函数。
这是很常见的。Advanced Linux Programming的几个章节更好地解释了它。
在您的情况下,无需使用线程。
但是,请注意,ls
和cat
的角色可以通过各种系统调用(在syscalls(2(...中列出(来完成,特别是read(2(和stat(2(。您甚至可能不需要运行其他进程。参见 opendir(3( & readdir(3(
也许(特别是如果你通过多个pipe(7(-s与多个进程进行通信(,你可能希望使用poll(2((或较旧的select(2)
(进行一些事件循环。一些库提供事件循环(特别是所有 GUI 小部件库(。
您有几个选择(一如既往(:
- 使用线程(C++标准库实现很好(生成多个线程,每个线程执行系统调用然后终止。
join
线程列表上等待它们全部终止。
使用 - *NIX
fork
命令生成一个新进程,然后在每个子进程中使用exec
执行所需的命令(有关"将正确的字符串传递给正确的子进程"的示例,请参阅此处(。父进程可以使用waitpid
来确定所有子进程何时完成运行,以便继续执行程序。 - 将"&"附加到每个命令,这将告诉 shell 在后台运行每个命令(具体来说,
system
将在后台启动进程然后返回,而无需等待结果(。没有尝试过这个,不知道它是否有效。然后你不能等待呼叫终止(感谢 PSkocik(。
只是指出 - 如果您同时运行这 3 个特定命令,您不太可能读取输出,因为它们将同时将文本打印到终端。
如果您确实需要从程序内部读取输出(尽管您的问题中未提及(,这是相关的(尽管它不使用system
(。
- 如何通过cpp程序运行shell脚本
- 如何在有限的分叉数量下运行类似shell的管道任务
- 通过C++应用程序运行 shell 脚本始于 JAVA
- 使用管道通过 TTY、PTY 或 execv() 运行 shell(例如 sh)有什么区别?
- 在结束运行之前获取 c++ 中的 shell 命令输出
- 如何在 Linux 中同时运行多个 shell 命令
- 分叉:使用一个参数运行 shell 时资源暂时不可用
- 为什么在Shell输出中运行的可执行操作到stdout,而不是崩溃时的stderr
- 在 pthread 中运行 shell 命令的良好和优化方法是什么?
- C++:在Linux shell脚本中运行GDB
- 运行 shell 脚本时出错:"pipe call failed"
- 从c++程序运行shell脚本会自动将shell脚本的输出显示到控制台吗
- 从shell脚本运行c scrips
- 如何在C++中正确运行 shell 脚本
- 在 Jenkins 中运行 "exec" 命令 "Execute Shell"
- 从CPP运行Shell脚本,而脚本绑定在exe中
- 在c++中运行shell脚本
- 正在创建C++程序以运行shell脚本
- Qt通过qprocess运行shell命令
- 在c++ ubuntu linux下运行shell命令出错