虚位以待(AD)
虚位以待(AD)
首页 > 操作系统 > LINUX > 嵌入式 Linux进程间通信(一)——进程

嵌入式 Linux进程间通信(一)——进程
类别:LINUX   作者:码皇   来源:互联网   点击:

嵌入式 Linux进程间通信(一)——进程。进程是程序的实例化,是运行中的程序。程序在编译时用链接器,运行时用加载器。进程运行在虚拟地址空间,操作系统中每个进程在独立的地址空间中运行,每个进程的而逻辑地址空间均为4GB(32位系统),0-1G位OS,1G-4G为应用。

嵌入式 Linux进程间通信(一)——进程

进程是程序的实例化,是运行中的程序。程序在编译时用链接器,运行时用加载器。进程运行在虚拟地址空间,操作系统中每个进程在独立的地址空间中运行,每个进程的而逻辑地址空间均为4GB(32位系统),0-1G位OS,1G-4G为应用。

每个进程都有一个在操作系统内唯一的进程号,进程号的获取函数有:

#include

#include

pid_t getpid(void);//返回当前运行进程的而进程ID

pid_t getppid(void);//返回当前运行进程的父进程的ID

uid_t getuid(void);//返回当前运行进程的用户ID

uid_t geteuid(void);//返回当前运行进程的有效用户ID

gid_t getgid(void);//返回当前运行进程的组ID

gid_t getegid(void);//返回当前运行进程的有效组ID

当设置-用户-ID(SUID)位设置,则有效用户ID等于文件的所有者的uid,而不是实际用户ID;同样,如果设置了设置-用户组-ID(SGID)位,则有效用户组ID等于文件所有者的gid,而不是实际用户组ID。linux系统通过进程的有效用户ID和有效用户组ID来决定进程对系统资源的访问权限。

一、进程的创建

#include

pid_t fork(void);

以复制当前运行进程的方式创建一个新进程,新的进程作为子进程。

成功,在父进程中返回子进程的PID,在子进程中返回0,子进程创建失败则在父进程中返回-1,设置errno。

#include

#include

pid_t vfork(void);

Vfork与fork一样,用来创建一个新进程,但不复制父进程的页表。

二、父子进程对文件的操作

子进程继承父进程中打开的文件,父子进程对文件的操作是接续写。父进程和子进程分别打开文件,父进程和子进程对文件的操作是分别写,即父子进程对文件的读写会相互覆盖。如果父进程先运行,则子进程会覆盖父进程对文件的操作,O_APPEND可以将父子进程分别打开的文件的文件指针关联,实现接续写。

三、进程的结束

进程运行时需要占用系统资源,进程结束时需要释放系统资源。进程退出时,操作系统会自动回收进程占用的系统资源。但父进程分配给进程本身占用的8KB内存(task_struct和栈)不能被操作系统回收。

#include

int atexit(void (*function)(void));

注册一个在进程正常中止时调用的函数,成功返回0,失败返回非0

注册多个函数时,先注册的函数后执行,后注册的函数先执行。

进程正常中止:return,exit,_exit(不执行atexit注册的函数)

#include

#include

pid_t wait(int *status);

pid_t waitpid(pid_t pid, int *status, int options);

WIFEXITED(status) 子进程正常终止则返回1

WIFSIGNALED(status)子进程由信号终止则返回1

WTERMSIG(status)返回触发子进程终止的信号的号码

wait工作原理:

A、子进程结束时系统向父进程发送一个SIGCHILD信号

B、父进程调用wait函数后阻塞

C、父进程被SIGCHILD信号唤醒然后去回收僵尸子进程

D、如果父进程没有任何子进程则wait返回错误

Wait函数用于等待当前进程的子进程的状态变化,包括子进程终止,子进程被信号停止,子进程被信号唤醒,在子进程终止的情况下,会释放与子进程相关的资源,但子进程处于僵尸状态则不会释放。

Waitpid可以回收指定PID的子进程,有阻塞和非阻塞模式。

相关热词搜索: