سؤال

I'm trying to write, as part of my code, a function so that a user can type

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

The user just types 'run date' and the program displays the bottom two lines. This is what I have in my function so far..

 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);
    }

This is not producing that yet, but I wanted to know if this is correct so far and if I'm missing an important part! Thank you.

هل كانت مفيدة؟

المحلول

The first argument to waitpid should the child's PID. Also, note that the WNOHANG option prevents the calling process from being blocked; as such,waitpid will return 0 if status information for the intended process is not available. If you want to wait until the child has terminated, use 0 as the third argument for waitpid (or use wait instead of waitpid).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top