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