#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, const char* argv[])
{
//__pid_t pid = getpid(); //当前进程
//__pid_t ppid = getppid(); //父进程
//printf("pid: %d\r\n", pid);
//printf("ppid:%d\r\n", ppid);
char* cmd = "pwd";
pid_t pid2 = vfork(); //fork()
//printf("hello world!\r\n");
if (pid2 > 0) //父进程
{
printf("父进程:pid:%d,ppid:%d\r\n", getpid(), getppid());
wait(NULL); //等待子进程结束, 避免僵尸进程
exit(0); //清理printf缓存
}
else if (pid2 == 0) //子进程
{
printf("子进程:pid:%d,ppid:%d\r\n", getpid(), getppid());
execl("/bin/sh", "sh", "-c", cmd, NULL); //shell执行参数的命令
}
else //创建错误
{
printf("fork error\r\n");
}
//char* const argv2[] = { "ls","-l",NULL };
//execl("/bin/ls", "ls", "-l", NULL); //调用可执行文件
//execlp("ps", "-ef", NULL);
//execv("/bin/ls", argv2);
return 0;
}