【发布时间】:2011-04-12 02:21:27
【问题描述】:
我想在 C 代码中创建多个终端进程。如,我想在终端进程中运行foo,然后在单独的终端进程中,我想运行bar。这可能吗?我可以用system(char *) 做吗?
【问题讨论】:
我想在 C 代码中创建多个终端进程。如,我想在终端进程中运行foo,然后在单独的终端进程中,我想运行bar。这可能吗?我可以用system(char *) 做吗?
【问题讨论】:
这听起来像是posix_spawn() 的工作。这是example。绝对不要致电system() 来启动新进程。
【讨论】:
system() 有什么问题?您是否建议不要仅仅因为它的执行是同步的而使用它,这可能不是 OP 对于这个特定用例想要的?你能澄清你的答案吗?
system() 块和 OP 想要多个进程,大概是同时。此外,system() 通过 shell,这是大多数用户在现实中不想这样做的。这是一个很好的list of other issues with it。
不清楚您所说的“终端进程”是什么意思。您不能(很容易?)创建另一个以某种方式导致用户打开更多终端的进程,但您可以使用fork(2) 创建一个子进程。
fork 创建另一个具有相同初始状态的进程副本,只是它在子进程中返回 0,并在父进程中返回一些非零 PID。所以草图看起来像:
if (fork())
system("bar");
else
system("foo");
这会导致您的原始程序产生两个进程,分别运行 foo 和 bar。
【讨论】:
fork() 在父进程(即子进程的 PID)中返回一个严格的正整数,在子进程中返回 0,或者错误时返回 -1。因此,switch(pid = fork()) {/*case -1 / 0 / default*/} 更合适。
如果你真的想作恶,假设你正在运行 X,你可以像这样启动 xterm:
while(processes to spawn)
{
if(!fork())
execlp("xterm", "-e", "foo"); // or "bar" or "baz" ...
}
【讨论】: