linux fork 创建进程

 

#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;
}

 

posted @ 2025-04-10 09:54  微笑的''80  阅读(3)  评论(0)    收藏  举报