質問

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?

役に立ちましたか?

解決

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.

他のヒント

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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top