问题
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?
回答1:
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.
回答2:
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().
回答3:
#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;
}
来源:https://stackoverflow.com/questions/22121464/execlp-system-call-error-in-output