【问题标题】:Multiple terminal processes in CC中的多个终端进程
【发布时间】:2011-04-12 02:21:27
【问题描述】:

我想在 C 代码中创建多个终端进程。如,我想在终端进程中运行foo,然后在单独的终端进程中,我想运行bar。这可能吗?我可以用system(char *) 做吗?

【问题讨论】:

    标签: c unix process terminal


    【解决方案1】:

    这听起来像是posix_spawn() 的工作。这是example。绝对不要致电system() 来启动新进程。

    【讨论】:

    • 嗯。 system() 有什么问题?您是否建议不要仅仅因为它的执行是同步的而使用它,这可能不是 OP 对于这个特定用例想要的?你能澄清你的答案吗?
    • @Tomalak 正确,system() 块和 OP 想要多个进程,大概是同时。此外,system() 通过 shell,这是大多数用户在现实中不想这样做的。这是一个很好的list of other issues with it
    【解决方案2】:

    不清楚您所说的“终端进程”是什么意思。您不能(很容易?)创建另一个以某种方式导致用户打开更多终端的进程,但您可以使用fork(2) 创建一个子进程。

    fork 创建另一个具有相同初始状态的进程副本,只是它在子进程中返回 0,并在父进程中返回一些非零 PID。所以草图看起来像:

    if (fork())
        system("bar");
    else
        system("foo");
    

    这会导致您的原始程序产生两个进程,分别运行 foobar

    【讨论】:

    • fork() 在父进程(即子进程的 PID)中返回一个严格的正整数,在子进程中返回 0,或者错误时返回 -1。因此,switch(pid = fork()) {/*case -1 / 0 / default*/} 更合适。
    【解决方案3】:

    如果你真的想作恶,假设你正在运行 X,你可以像这样启动 xterm:

    while(processes to spawn)
    {
        if(!fork())
            execlp("xterm", "-e", "foo"); // or "bar" or "baz" ...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 2016-07-07
      • 2016-09-16
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多