1

私は次のコードを持っています。

私の質問はコードにあります

     int main() {

            ....

         if ((uproc.pid = fork()) == -1) {
            return -1;
        }

        if (uproc.pid == 0) {
            /* child */

            const char *argv[3];
            int i = 0;
            argv[i++] = "/bin/sh";
            argv[i++] =  "/my/script.sh";
            argv[i++] = NULL;

            execvp(argv[0], (char **) argv);
            exit(ESRCH);

        } else if (uproc.pid < 0)
            return -1;

        /* parent */
        int status;
        while (wait(&status) != uproc.pid) {
            DD(DEBUG,"waiting for child to exit");
        }

           // If /my/script.sh exit accidentally in some place with error. 
           // can I catch this error right here?
          ......
    }
4

1 に答える 1

4

子の終了ステータスはwait、変数内の関数によって提供されstatusます。

マクロを使用して終了ステータスを取得しますがWEXITSTATUS、プログラムが正常に終了した場合(つまり、関数が呼び出された場合、または関数exitから戻った場合)に限ります。main

if (WIFEXITED(status))
    printf("Child exit status: %d\n", WEXITSTATUS(status));
else
    printf("Child exited abnormally\n");

詳細については、マニュアルページをwaitお読みください。

于 2012-11-23T16:07:21.393 に答える