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

linux - 多进程 总结1

时间:2016-08-07 20:07:25      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

参考:

operatingfocus.bokee.com/3327857.html

www.oschina.net/code/snippet_237505_8646

www.cnblogs.com/techdoc/archive/2010/12/22/1913521.html

一.多进程编程里常用的函数。

1.pid_t fork();

  创建子进程

2.int execl(const char * path,const char * arg,....);

  path是可执行文件路径,  头文件#include<unistd.h>,该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。

3.int execlp(const char * file,const char * arg,……);

  execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件。

4.int execv (const char * path, char * const argv[ ]);

  path是文件路径

5.pid_t getpid(void);

  getpid()用来取得目前进程的进程识别码

6.pid_t getppid(void);

   getppid()用来取得目前进程的父进程识别码。

7.void setsid(void);

如 果调用此函数的进程不是一个进程组的组长,则此函数就会创建一个新会话,该进程变成会话的首进程,然后该进程成为一个新进程组的组长进程,该进程没有控制 终端。因为会话首进程是具有唯一进程ID的单个进程,所以可以将会话首进程的进程ID视为会话Id。此函数配合umask()可将进程变成守护进程。

8.pid_t wait(int * status);

功能:阻塞该进程,直到其某个子进程退出.

9.pid_t wait (int * status);

  #include<sys/types.h>,#include<sys/wait.h>。wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。回收僵尸进程

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

  参数 pid 为欲等待的子进程识别码,其他数值意义如下:

     pid<-1 等待进程组识别码为 pid 绝对值的任何子进程。
     pid=-1 等待任何子进程,相当于 wait()。            
     pid=0     等待进程组识别码与目前进程相同的任何子进程。       
     pid>0     等待任何子进程识别码为 pid 的子进程。

  参数 option 可以为 WNOHANG, 如果没有任何已经结束的子进程则马上返回, 不予以等待。

二.进程间的通信

 1.信号量

  1)  int sem_wait(sem_t *sem);

  //P操作,若是信号量大于零则减一,否则阻塞在该函数位置等待.

  2)  int sem_post(sem_t *sem);

  //V操作,信号量加一

  3)  sem_t *sem_open(const char *name, int oflag);

  //打开信号量,flag参数与打开普通文件的标记一样

  4)  sem_t *(const char *name, int oflag,mode_t mode, unsigned int value);

  //创建并打开信号量,value参数指的是信号量的初始值oflag参数可以是0、O_CREAT(创建一个信号灯)或O_CREAT|O_EXCL(如果没有指定的信号灯就创建),

  其中mode参数指定权限位(00777).

  5)  int sem_unlink(const char *name);

  //删除系统创建的信号量

  6)  int sem_close(sem_t *sem);

  //关闭彻底销毁信号量

 

 2.管道

 

 

  int pipe(int filedis[2]);

  头文件#include <unistd.h>,参数filedis返回两个文件描述符:filedes[0]为读而打开,filedes[1]为写而打开。filedes[1]的输出是filedes[0]的输入。

 

3.内存共享

  #include <sys/mman.h>

 

  void *mmap(void *start, size_t length, int prot, int flags,int fd, off_t offset);

 

  int munmap(void *start, size_t length);

  例子:

    p_map = (people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

    p_map=(people*)mmap(NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);//匿名,适合父子进程之间

    munmap( p_map,sizeof(people)*10 );

 

linux - 多进程 总结1

标签:

原文地址:http://www.cnblogs.com/jinfei/p/5746867.html

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