exec()与system()的区别
https://blog.csdn.net/wu5795175/article/details/9064497
execv使用
https://blog.csdn.net/west_609/article/details/5941968
测试例子
test.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
printf("start arg0:%s arg1:%s\n", argv[0], argv[1]);
printf("end\n");
while(1);
return 0;
}
test2.c
/* test.c */
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
char *argv[] = {".s/test vvv adctest","two2", NULL};
char *envp[] = {NULL};
int ret_stat = 0;
int pid = fork();
if (pid == 0) {
printf("child: pid %d\n", getpid());
//execve("./rt", argv, envp);
execve("./test", argv, envp);
//system("./rt");
exit(127);
}
else if (pid > 0 ) {
printf("parent: child pid is %d\n", pid);
if (waitpid(pid, &ret_stat, 0) != pid) {
printf("waitpid failed, ret_stat is %d\n", ret_stat);
}
else {
printf("waitpid success, ret_stat is %d\n", ret_stat);
printf("WIFEXITED(ret_stat): %d; WEXITSTATUS(ret_stat): %d;", WIFEXITED(ret_stat), WEXITSTATUS(ret_stat));
}
}
else if (pid < 0) {
printf("fork() error !\n");
exit(-1);
}
return 0;
}
使用execv时,里面调用程序的arg0,arg1注意事项
运行结果如下
parent: child pid is 1271
child: pid 1271
start arg0:.s/test vvv adctest arg1:two2
end
ps
1006 23180 0.0 0.0 4172 348 pts/5 S+ 17:41 0:00 ./test2
1006 23181 105 0.0 4172 348 pts/5 R+ 17:41 0:04 .s/test vvv adctest two2