【Linux系统编程】进程编程

本文详细介绍了Linux系统编程中的进程创建,包括fork和vfork的区别,进程退出的方式,等待子进程的策略,如wait、waitpid,以及exec族函数和system、popen函数的使用。特别强调了exec函数在进程替换中的作用,以及如何通过fork和exec组合实现特定功能。
摘要由CSDN通过智能技术生成

目录

一、创建进程函数fork

二、vfork函数fork有什么区别

1、fork

2、vfork

三、 进程退出

四、等待子进程

1、 僵尸进程

2、wait等待子进程

3、waitpid等待子进程

4、孤儿进程

五、exec族函数

1、为什么要用exec族函数,有什么作用

2、exec配合fork使用

六、system函数

七、popen函数


一、创建进程函数fork

pid_t fork(void); 

fork函数调用成功,返回两次

        返回值为0,代表当前进程是子进程

        返回值非负数,代表当前进程为父进程

调用失败,返回-1

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>


int main()
{
	pid_t pid;
	pid_t pid2;
	pid_t retpid;


	pid = getpid();
	printf("before fork: pid = %d\n",pid );	

	retpid = fork();
	
	pid2 = getpid();
	printf("after fork: pid = %d\n",pid2 );	
	

	if(pid == pid2)
	{
		printf("this is father print: retpid = %d,father pid = %d\n",retpid,getpid());
	}
	else{
		printf("this is child print: retpid = %d,child pid = %d\n",retpid,getpid());
	}

	return 0;
}

 

 补充forktest:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>


int main()
{
	pid_t pid;
	int data = 10;


	printf("father: pid=%d\n",getpid());

	pid = fork();
		
	if(pid > 0)
	{
		printf("this is father print, pid = %d\n",getpid());	
	}
	
	else if(pid == 0){
		printf("this is child print,child pid = %d\n",getpid());
		data = data+100;
	}
	
	printf("data=%d\n",data);
	return 0;
}

 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>


int main()
{
	pid_t pid;
	int data = 10;

	while(1){

		printf("please input a data\n");
		scanf("%d",&data);	
		if(data == 1){
						
				pid = fork();
					
				if(pid > 0)
				{
					
				}
				else if(pid == 0){
				
					while(1){
						printf("do net request,pid=%d\n",getpid());
						sleep(3);
					}
				}
		}
		else{
			printf("wait ,do nothing\n");
		}
	}

	return 0;
}

 

二、vfork函数fork有什么区别

关键区别一: vfork 直接使用父进程存储空间,不拷贝。

关键区别二: vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。

1、fork

#include <stdio.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
	pid_t pid;


	pid = fork();
		
	if(pid > 0)
	{
		while(1){
			printf("this is father print, pid = %d\n",getpid());
			sleep(1);
		}	
	}
	
	else if(pid == 0){
		while(1){
			printf("this is chilid print, pid = %d\n",getpid());
			sleep(1);
		}	
	}

	return 0;
}

2、vfork

#include <stdio.h>
#include <stdio.h>
#include <sys/types.h>
#inclu
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值