【问题标题】:C: 'run' command using waitpid & command line inputC:使用 waitpid 和命令行输入的“运行”命令
【发布时间】:2014-02-20 01:58:30
【问题描述】:

我正在尝试编写一个函数,作为我的代码的一部分,以便用户可以键入

shell> run date     //Line of user input
Mon Jan 19 11:51:57 EST 2009  //Printed by program
shell: process 348 exited normally with status 0

用户只需键入“运行日期”,程序就会显示底部两行。 到目前为止,这就是我的职能。

 else if(strcmp(argv[1],"run") == 0 ) {
           if ((pid = fork()) < 0) {  //Child process fork
                    perror("fork");       
                    exit(1);
                    }   
            //printf("ok");
            if (pid == 0) {  //Child executes code
                    execvp(argv[2], &argv[2]); 
                    exit(1);
                    }

    waitpid(atoi(argv[2]), &status, WNOHANG);

    printf("shell: run status is %d\n", status);
    }

这还没有产生,但我想知道到目前为止这是否正确以及我是否遗漏了重要部分!谢谢。

【问题讨论】:

    标签: c waitpid


    【解决方案1】:

    waitpid 的第一个参数应该是孩子的 PID。另外,请注意 WNOHANG 选项可防止调用进程被阻塞;因此,如果预期进程的状态信息不可用,waitpid 将返回 0。如果您想等到孩子终止,请使用0 作为waitpid 的第三个参数(或使用wait 而不是waitpid)。

    【讨论】:

    • 或者,第一个参数为零等待任何孩子;如果命令已在后台运行(它允许 shell 避免僵尸),这可能很有用,但您需要围绕 waitpid() 调用进行循环。您可能应该报告waitpid() 返回的PID 以及状态。如果以十六进制打印,则状态更容易理解(低位字节通常为零,除非孩子死于信号)。
    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2020-07-12
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多