gpt4 book ai didi

c - 当我不在父进程中等待子进程时,如何终止程序?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:28 25 4
gpt4 key购买 nike

我正在尝试制作一个模仿 Linux shell 的程序。

它以两种模式运行

(1) 交互模式(无参数)

等待子进程。一次执行一个命令。

(2) 批处理模式(给定一个文件)

不要等待。尝试并行执行命令。

我的代码很长,所以我决定制作一个示例程序来解决(重点)我面临的问题。

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

struct commands
{
char *cmd[2];
};

int main(int argc, char *argv[])
{
printf("A program made to understand execvp\n");

commands threeCommands[3];

pid_t process;
int child_status;

threeCommands[0].cmd[0] = "date";
threeCommands[0].cmd[1] = NULL;

threeCommands[1].cmd[0] = "pwd";
threeCommands[1].cmd[1] = NULL;

threeCommands[2].cmd[0] = "cal";
threeCommands[2].cmd[1] = NULL;

for(int i = 0;i <3;i++)
{
process = fork();

if(process == 0)
{
execvp(threeCommands[i].cmd[0],threeCommands[i].cmd);
}
else
{
//wait(&child_status);
}
}

return 0;
}

如您所见,我正在注释掉等待,以便我尝试进行并发处理,并且命令的结果是随机的并且可能是混合的。

问题出在date,pwd,cal这三个命令执行之后

程序不会终止。它卡住在这种状态下,并没有结束,所以我的光标就在那里,就好像它需要输入一样。而我的程序并没有结束。我该如何解决这个问题?

我应该使用 kill 还是什么?

最佳答案

输出后按Enter键即可。

如果父进程在子进程之前退出,则 shell 将在父进程退出后打印提示,然后子进程打印其输出,但 shell 不会打印新提示。查看输出末尾上方的几行以查看父进程退出后的提示。

例如,在修改您的代码以在调用 execvp 之前添加一个 sleep(1) 之后(强制子进程被延迟),我得到以下输出我的系统:

[~/tmp]$ ./a.out A program made to understand execvp[~/tmp]$ tis  9 feb 2016 18:54:06 CET/home/XXXX/tmp   Februari 2016      sö må ti on to fr lö      1  2  3  4  5  6   7  8  9 10 11 12 13  14 15 16 17 18 19 20  21 22 23 24 25 26 27  28 29                 

如您所见,提示是在 date 命令运行之前打印的(.[~/tmp]$date 输出之前) .按 Enter 返回提示。

关于c - 当我不在父进程中等待子进程时,如何终止程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com