我正在用C编写一个类似Linux shell的程序。
除其他外,我正在实现两个内置命令:jobs, history. In jobs,我打印当前工作命令的列表(在后台)。在history中,我将打印到现在为止的所有命令的历史记录列表,指定每个命令是否正在运行或完成。
为了实现这两者,我的想法是有一个命令列表,将命令名映射到它们的PID。一旦调用了作业/历史命令,我就会运行它们,检查正在运行或完成的任务,并相应地打印。
我在网上读到,函数:waitpid(pid, &status, WNOHANG),可以从"PID“中检测进程是否仍在运行或是否已完成,而无需停止进程。它工作得很好
我想让它成为当用户附加一个-在一个命令之后,它将在后台执行。出于某些原因,如果我正常执行命令,它将等待,如果我在后台执行命令,它将工作,但如果我正常执行命令,它不会等待它。我确信我只是做了一些小错误。任何想法:
void executeSystemCommand(char *strippedCommand, char *background, int argc, char **args) {
char pathToExecute[80];
// Check if command will be executed in the background
int shell