how to exit a child process - _exit() vs. exit

helpermethod picture helpermethod · Feb 24, 2010 · Viewed 56.9k times · Source

Consider this code snippet:

pid_t cpid = fork();

if (cpid == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
}

if (cpid == 0) { // in child
    execvp(argv[1], argv + 1);
    perror("execvp");
    _exit(EXIT_FAILURE);
}

// in parent

How shall I exit the child process if execvp returns? Shall I use exit() or _exit()?

Answer

Variable Length Coder picture Variable Length Coder · Feb 24, 2010

You should definitely use _Exit(). exit() calls the functions you added with atexit() and deletes files created with tmpfile(). Since the parent process is really the one that wants these things done when it exists, you should call _Exit(), which does none of these.

Notice _Exit() with a capital E. _exit(2) is probably not what you want to call directly. exit(3) and _Exit(3) will call this for you. If you don't have _Exit(3), then yes, _exit() is what you wanted.