进程、进程控制编程

本文介绍了Linux系统中进程的基本概念和特性,详细讲解了如何获取进程ID、创建子进程(fork、vfork)、执行新程序(exec函数族)、等待子进程结束(wait、waitpid)以及进程间的通信方式(kill、raise、signal)。通过示例代码阐述了各个函数的使用方法和注意事项,帮助理解进程控制编程。
摘要由CSDN通过智能技术生成

进程的概念:进程是一个具有独立功能的程序的一次运行活动、 资源分配的最小单元。

进程与程序:1、程序是放到磁盘里的可执行文件(静态的、长久的)

                        2、进程是指程序执行的实例(动态的、短暂的)一个状态的变化过程

                        通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。

创建:父进程(PPID)—>子进程(PID)——>孙进程              启动进程的用户ID(UID

在Linux系统中,进程具有并行性、互不干扰等特点。一个进程发生异常不会影响其他进程。

(1)、“数据段”存放的是全局变量、常数以及动态数据分配的数据空间;

(2)、“代码段”存放的是程序代码的数据。

(3)、“堆栈段”存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。 

进程互斥:是指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。

 

1、获取ID:getpid

#include <sys/types.h>

#include <unistd.h>

pid_t getpid(void)        获取本进程ID。

pid_t getppid(void)        获取父进程ID

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

int main()
{
	printf("pid : %d\n", getpid());
	printf("ppid : %d\n", getppid());

	while (1);
	return 0;
}

【注】:加while死循环是为了让这个进程不结束,才可以获取id

2、fork

#include <unistd.h>

pid_t fork(void)

功能:创建子进程      

fork的奇妙之处在于它被调用一次,却返回两次,它可能有三种不同的返回值:

返回值: 0: 子进程 //        子进程ID(大于0):父进程          //   -1: 出错

(1)、父进程创建子进程

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

int main()
{
	pid_t pid;
	int a = 0;

	pid = fork();   //创建子进程 
	if (-1 == pid)   //失败返回-1
	{
		perror("fork");
		exit(1);
	}
	else if (0 == pid)    //子进程
	{	
		a++;
		printf("Child a = %d %p\n", a, &a);
		printf("This is ChildProcess pid %d ppid %d!\n", getpid(), getppid());
		printf("%d\n", pid);
	}
	else                  //父进程
	{
		a++;
		printf("Parent a = %d %p\n", a, &a);
		printf("This is ParentProcess %d!\n", getpid());
		printf("%d\n", pid);
	}


	return 0;
}

值得注意的是fork( )创建子进程是大多数情况是先返回0,再返回子进程的ID。

(2)、父进程写,子进程读  fork实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值