我正在尝试用C创建一个简单的shell,但是已经知道它无法处理“jobs”命令。我试过了
execlp("jobs", "jobs", (char *) 0);
但是返回“execlp:没有这样的文件或目录”。
在bash中我尝试过做
$ which jobs
但是说它无法在我的任何PATH文件夹中找到作业。 我可以在bash中使用jobs命令,但找不到执行文件,所以我可以在shell中使用execlp。
这只是一个我无法实现的bash函数,还是在C中有一个单独的函数来执行此操作?
答案 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)
。