-1

经过很长时间研究我的问题,我真的不知道如何解决它。我的问题是我需要这样的 C 源代码:

ls &

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(void) {
    int new_pid;
    int status;

    new_pid = fork();

    if (new_pid == 0) {
        execlp("ls", "ls", "-l", NULL);
    } else {
        waitpid(new_pid, &status, 0);
    }

    return 0;
}

如果我这样编码,'ls -l' 将被执行,但它没有被分叉到后台。

这只是一个示例 'ls -l',它也可以是 'xournal &;'、'libreoffice &' 或类似的东西。
我的主要问题是我不知道如何在 C 中编写“&”。谁能给我一个提示甚至解决方案?

4

2 回答 2

2

当你执行另一个程序时,你需要调用这些函数:

new_pid = fork();
exec(...); //in the child only

如果你想等到新进程结束(即不指定&)你打电话

waitpid(new_pid, ...);

这样,您的 shell 将一直阻塞,直到您启动的进程完成。

如果您不想等待,而只是继续操作您的 shell(即指定&),您根本不调用 waitpid()。

于 2013-08-15T11:15:35.980 回答
0

使用system("ls &").

如果您解释了为什么要在后台运行某些东西会有所帮助。

于 2013-08-15T11:27:40.983 回答