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

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命令的位置。我已经成功地执行了所有的命令,如果找到quit,就将flag变量设置为1。问题是如果执行完所有命令后,我不能退出我的程序。我试着用父母的id从孩子身上发送一个flag == 1信号,但id不起作用。我怎么能那样做?

最佳答案

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

关于c - C-命令行解释器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48079509/

10-11 22:42
查看更多