Linux编程3.5 进程-进程创建

19 篇文章 0 订阅
14 篇文章 0 订阅

1、相关函数

#include<unistd.h>
#include<sys/types.h>
pid_t fork(void);			
返回:子进程中为0,父进程中为子进程ID,出错为-1

pid_t vfork(void);			
返回:子进程中为0,父进程中为子进程ID,出错为-1

  • fork创建的新进程被称为子进程,该函数调用一次,但返回两次。两次返回的区别是:在子进程中返回值是0,而在父进程中的返回值则是新子进程的进程ID。
  • 创建子进程,父子进程哪个先运行根据系统调试且复制父进程的内存空间。
  • vfork创建子进程,但子进程先运行且不复制父进程的内存空间。

2、相关示例:

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

int main(void)
{
	pid_t pid;
	printf("start call fork\n");

	pid=fork(); //创建子进程

	//在fork之后会运行两个进程(父进程和子进程)
	if(pid<0)
	{
		perror("fork error");
	}
	else if(pid>0)//父进程
	{
		//在父进程中fork返回的是子进程的pid
		//父进程执行的代码……
		printf("I am parent,pid : %d,ppid:%d,fork :%d\n",
				getpid(),getppid(),pid);
	}
	else//子进程
	{
		//在子进程进程中fork返回的是0
		//子进程执行的代码……
		printf("I am child,pid:%d,ppid:%d,fork:%d\n",
				getpid(),getppid(),pid);
	}
	return 0;
}

运行结果:

  

3、子进程与父进程的关系

  • 子进程的继承属性
    • 用户信息和权限、目录信息、信号信息、环境、共享存储段、资源限制、堆、栈和数据段,共享代码段
  • 子进程特有属性
    • 进程ID、锁信息、运行时间、未决信号
  • 操作文件时的内核结构变化
    • 子进程只继承父进程的文件描述表,不继承但共享文件表项和i-node。
    • 父进程创建一个子进程后,文件表项中的引用计数器加1变成2,当父进程作close操作后,计数器减1,子进程还是可以使用文件表项,只有当计数器为0时才会释放文件表项。

查看指定进程的信息:  ps -ef | grep 进程名字

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值