我正在实施一个命令行解释器作为大学家庭作业。我得到了一串命令,然后我必须在子进程中分叉并执行命令。以下是我的代码示例:
do
{
if (argc == 1)
{
do
{
do
{
printf("prompt>> ");
line = get_string();
}while(strcmp(line, "") == 0 || line[0] == ';');
if ( (pid = fork()) < 0 )
{
perror("error in forking.");
exit(1);
}
else if (pid == 0)
{
// execute the commands with format: cmd1 ; cmd2 ; cmd3
line_1 = strtok(line, NULL);
if ( strcmp(line_1, "quit")
{
flag = 1;
}
}
else
{
printf("...mother proccess...\n");
}
while ( (wpid = wait(&stat)) > 0)
}while(status);
}
}while(something);
如果我在命令格式quit
中有cmd1 ; cmd2; cmd3
命令,我必须执行所有命令,然后退出程序,而不管quit
命令放在哪里。命令的格式。我已设法执行所有命令,如果找到退出,则将flag
变量设置为1。问题是,如果在执行完所有命令后flag == 1
,我无法退出程序。我尝试通过父亲的id发送一个来自孩子的SIGTERM
信号但是id不起作用。我怎么能这样做?
答案 0 :(得分:1)
您需要检查父进程中是否存在退出。 然后你可以分叉并使用 wait()来等待你的子进程终止然后正常退出。 甚至直接分叉和退出。