UNIX C 进程Part2
1.获取进程ID
#include <unistd.h> pid_t getpid(void); //获取子进程id
pid_t getppid(void);//获取父进程id
2.获取实际用户ID和实际用户组ID
#include <unistd.h> uid_t getuid(void);
uid_t getgid(void);
3.有效用户ID和有效组ID
#include <unistd.h> uid_t geteuid(void);
uid_t getegid(void);
4.进程创建
#include <unistd.h> pid_t fork(void);//写时复制方式创建进程,把父进程资源复制到子进程,只要代码区是共享
这种进程退出方式 --exit(status)
pid_t vfork(void);//和父进程共享资源
退出进程函数_exit(status)
5.进程正常退出
exit退出处理函数
#include <stdlib.h> void exit(int status); exit退出函数在执行退出函数的时候会做下面三步
.检查或执行遗言函数atexit、on_exit
.关闭I\O流
.删除tmpfile函数创建的临时文件
_exit()和_Exit()
#include <unistd.h> void _exit(int status);//vfork()相对应的退出函数 #include <stdlib.h> void _Exit(int status);//和exit函数相似
退出前处理以下三件事儿
.关闭文件描述符
.将子进程交给init进程收养
.向调用的父进程发SIGCHLD()信号
6.遗言函数
#include <stdlib.h> int atexit(void(*function)(void));
成功返回0,失败非0 int on_exit(void(*function)(int,void*),void* arg);
成功返回0,失败返回非0 --function:函数指针
--arg:泛型指针(万能指针),该参数指向function处理函数
7.异常终止进程
#include <stdlib.h> void abort(void);
不返回 进程解除SIGABRT()信号阻塞,然后导致进程阻塞
8.进程回收处理
wait
#include <sys/wait.h> pid_t wait(int* status);//为子进程收尸,回收系统资源 成功返回子进程ID,失败-
waitpid
#include <sys/wait.h> pid_t pid = waitpid(pid_t pid,int* status,int option);
成功返回子进程pid或0,失败返回- --pid:可取下值
< - ;等待特定进程组的任意子进程
-;等待并回收任意子进程和wait函数一样
;回收同进程组的调用进程中任意子进程
>;回收特定子进程(由pid标识) --option:可取下值
;阻塞模式,直至子进程终止
WNOHANG,非阻塞模式,子进程仍在运行返回 ;
9.exec在一个进程上创建新的进程,但pid会不变
#include <unistd.h> int execl(const char* path,const char *arg,...)
int execlp(const char* file,const char *arg,...)
int execle(const char* path,const char *arg,...,char const envp[]);
int execv(const char* path,char* const arg[]);
int execvp(const char* file,char* const arg[]);
int execve(const char* path,char* const arg[],char* const envp[]); --l 即list 字符指针 命令行 列表参数
--p 即path 根据环境变量中文件
--e 即env 环境字符指针数组
--v 即vector 命令行参数 exec函数,不返回
10.system函数
#include <stdlib.h> int system(const char* command); --command 命令字符串
UNIX C 进程Part2的更多相关文章
- Unix守护进程
问题描述: Unix守护进程 问题解决: Unix守护进程没有控制终端,终端名设置为问号(?),终端前台进程组ID设置(TPGID)为-1 守护进程编写规则: (1) ...
- Linux/Unix分配进程ID的方法以及源代码实现
在Linux/Unix系统中.每一个进程都有一个非负整型表示的唯一进程ID.尽管是唯一的.可是进程的ID能够重用.当一个进程终止后,其进程ID就能够再次使用了. 大多数Linux/Unix系统採用延迟 ...
- 利用lsof去查看Unix/Linux进程打开了哪些文件
利用lsof去查看Unix/Linux进程打开了哪些文件 今天用了一下lsof,发现这个linux的小工具,功能非常强大而且好用. 我们可以方便的用它查看应用程序进程打开了哪些文件或者对于特定的一个文 ...
- 编写Linux/Unix守护进程
原文: http://www.cnblogs.com/haimingwey/archive/2012/04/25/2470190.html 守护进程在Linux/Unix系统中有着广泛的应用.有时,开 ...
- unix/linux 进程间文件锁
转自 http://www.cnblogs.com/hjslovewcl/archive/2011/03/14/2314333.html 有三种不同的文件锁,这三种都是“咨询性”的,也就是说它们依靠程 ...
- unix/linux进程详解
技术分享 启动新进程 stdlib.hintsystem(const char *string)whichequals to "sh -c string" 替换进程映像unistd ...
- UNIX环保进程
学习的过程之前,先来了解下过程中的操作环境. main功能 过程总是开始main功能开始执行,我们编程,程序从main功能进行,它是原型例如,下面的: int main(int argc, char ...
- UNIX基础--进程和守护进程
进程和守护进程 Processes and Daemons 进程(Processes) FreeBSD 是一个多任务操作系统. 这就意味着好像一次可以运行一个以上的程序. 每个占用一定时间运行的程序就 ...
- Unix 让进程安全地退出
终止一个进程有很多方法(暂只说linux环境):前台运行的进程,如果没有提供退出功能,我们通常会Ctrl+C进行终止:后台或守护进程,如果也没有提供退出命令啥的,咱通常会kill掉:此外还有类似关机或 ...
随机推荐
- jsp页面中使用javascript获取后台放在request或session中的值
在JSP页面中.常常使用javascript,可是要出javascript获取存储在request,session, application中的值.例如以下是获取request中的值: 如果后台中有: ...
- Extjs 3 控制Grid某行某列不可编辑
var cmGoodsFee = new Ext.grid.ColumnModel([rmGoodsFee, { header : "id", tooltip : "id ...
- Linux批量生成生成帐户脚本,随机密码
此脚本应用于生产环境下生成帐户,也可生成成百上千个密码相同的帐户.脚本代码如下: 批量生成: #!/bin/bash for name in tom jerry joe jane do useradd ...
- PCB 奥宝LDI 输出正负片转换关系
今天继续对P2 奥宝LDI改造,在文件输出的时候遇到了一个正负片转换问题,研究了半天一直没有得到解决, 回来后前前后后整理今天参数输出与输出的关系,最终还梳理清楚了, 今天小结:一项技术只要用心去研究 ...
- Squares(枚举+set 查找)
http://poj.org/problem?id=2002 题意:给出n组坐标,判断这些坐标能组成的正方形的个数. 思路:参考某大神的想法,先枚举两个点,然后利用公式表示出另外两个点,判断这两个点是 ...
- EditPlus 1:更改默认编码方式
打开软件点击上面的菜单栏Tools(工具),再找到Configure User Tools(用户配置工具)点击,再找到左边栏File点击,这个时候可以看到右边栏的Default encoding点击可 ...
- CentOS6 在线安装PostgreSQL10
本文主要通过实际案例介绍如何在CentOS6环境中在线安装PostgreSQL10,安装环境需具备能够使用yum在线安装功能.具体安装步骤如下, 1 下载对应版本的PGDG文件 从https://yu ...
- 5.30dao-service-controller层,mybatis自动生成。(获取根据id主键获取指定详细数据)
获取权限详细数据:(参考) 1.controller:1.注入Servcie调用方法findConsumerById(参数是id); ...
- 八:前端---Vue下的国际化处理
1:首先安装 Vue-i8n npm install vue-i18n --save 注:-save-dev是指将包信息添加到devDependencies,表示你开发时依赖的包裹. -save是指将 ...
- 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别
1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...