用C打印后台进程列表的功能(如作业)?

时间:2014-11-09 23:06:28

标签: c bash shell

我正在尝试用C创建一个简单的shell,但是已经知道它无法处理“jobs”命令。我试过了

execlp("jobs", "jobs", (char *) 0);

但是返回“execlp:没有这样的文件或目录”。

在bash中我尝试过做

$ which jobs

但是说它无法在我的任何PATH文件夹中找到作业。 我可以在bash中使用jobs命令,但找不到执行文件,所以我可以在shell中使用execlp。

这只是一个我无法实现的bash函数,还是在C中有一个单独的函数来执行此操作?

1 个答案:

答案 0 :(得分:1)

jobs是一个内置的bash,你无法从C程序中执行它。

您可以做的是保留已创建的孩子的PID:

pid_t child_pids[1000], f;
int child_nb=0;

f = fork();
if (f < 0) { perror ("fork"); exit (1); }

if (f == 0) { // child
    // do the child stuff
    exit (0);
}

// Parent
child_pids[child_nb++] = f;

要更新您的子列表,您可以收到SIGCHLD并致电waitpid(-1,NULL,WNOHANG)