C - 命令行解释器

时间:2018-01-03 14:37:13

标签: c shell

我正在实施一个命令行解释器作为大学家庭作业。我得到了一串命令,然后我必须在子进程中分叉并执行命令。以下是我的代码示例:

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不起作用。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您需要检查父进程中是否存在退出。 然后你可以分叉并使用 wait()来等待你的子进程终止然后正常退出。 甚至直接分叉和退出。