Frage

This very simple example of exec() system call. Here, I am trying to call execlp() twice. But, I am not getting excepted output. It shows output only for first call with current directory.

#include <stdio.h>
#include <unistd.h>

int main() { 

        int ret1,ret2;
        ret1 = execlp( "pwd", "pwd", (char *) 0);
        ret2 = execlp( "date", "date", (char *) 0);
        return 0;
}

OUTPUT :

/home/aniket

Here, I can't see output for date. Can anyone please explain why is this happening?

War es hilfreich?

Lösung

execlp() replaces the current process image with a new process image. It does not return (unless there was an error starting the new process).

Therefore the second execlp() call is never reached.

Andere Tipps

execlp () replaces the process that called it by the process which was called.

From this link:

"The exec() family of functions replaces the current process image with a new process image."

To retain both the processes, use fork().

#include <stdio.h>
#include <unistd.h>

int main() { 

        int ret1,ret2;

        pid_t chd;
        chd=fork(); 
        if(chd==0)
        ret1 = execlp( "pwd", "pwd", (char *) 0);
        else if(chd>0)
        ret2 = execlp( "date", "date", (char *) 0);
        return 0;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top