码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2016-07-06 18:42:36      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:嵌入式 linux 进程间通信 进程

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

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

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

#include <sys/types.h>

#include <unistd.h>

 

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

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

一、进程的创建

#include <unistd.h>

 

pid_t fork(void);

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

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

#include <sys/types.h>

#include <unistd.h>

 

pid_t vfork(void);

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

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

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

三、进程的结束

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

#include <stdlib.h>

 

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

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

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

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

 

#include <sys/types.h>

#include <sys/wait.h>

 

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的子进程,有阻塞和非阻塞模式。


本文出自 “生命不息,奋斗不止” 博客,转载请与作者联系!

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

标签:嵌入式 linux 进程间通信 进程

原文地址:http://9291927.blog.51cto.com/9281927/1797923

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!