linux下进程相关操作
进程标志符:进程ID,内核分配,该标志符非负,范围0~32767
父进程和父进程ID(PPID)
启动进程的用户ID(UID)和所归属的组(GID);
进程的有效用户ID和有效组ID
进程的进程组ID:一个进程可以属于某一个进程组。
进程的会话ID:每一个进程都属于惟一的会话。
进程状态:状态分为运行R、休眠S、阻塞Z;
进程执行的优先级;
进程资源占用:比如占用资源大小(内存、CPU占用量);
getpid(void) 获取当前进程ID
getppid(void) 获取当前进程的父进程ID
getpgrp(void) 获取当前进程的进程组ID
getpgid(pid_t pid) 获取进程组ID
geteuid(void)
获取当前进程的有效用户ID
getgid(void) 获取当前进程的用户组ID
getegid(void)
获取当前进程的有效用户组ID
getsid(pid_t pid) 获取当前进程的会话ID
setpgid()将参数pid 指定进程所属的组ID设为参数pgid 指定的组识别码。如果参数pid 为0,则会用来设置目前进程的组ID,如果参数pgid为0,则会以
目前进程的进程ID来取代。
int setpgrp(void)
setpgrp()将目前进程所属的组ID设为目前进程的进程ID。此函数相当于调用setpgid(0,0)。
pid_t setsid(void)
int setuid(uid_t uid) 设置进程的用户ID
int setreuid(uid_t ruid, uid_t euid) 将进程的实际用户ID设置为ruid,有效用户ID设置为euid
int seteuid(uid_t uid) 设置进程的有效用户ID为uid
int setgid(gid_t gid) 设置进程的组ID
int setregid(gid_t rgid, gid_t egid) 将进程的实际组ID设置为rgid,有效组ID设置为egid
int setegid(gid_t gid) 设置进程的有效组ID
Linux用nice系统调用来修改进程的优先级,默认情况下,进程的优先级为0,系统允许的优先级的 范围为:-20~2
int nice(int inc)
nice()用来改变进程的进程执行优先顺序。参数inc数值越大则优先顺序排在越后面,即表示进程执行会越慢。 只有超级用户才能使用负的inc值,代表优先顺序排在前面,进程执行会较快。返回值 如果执行成功则返回0,否则返回-1,失败原因存于errno中。错误代码 EPERM 一般用户企图转用负的参数inc值改变进程优先顺序。 nice系统调用只能用于修改进程自身的优先级。
setpriority(设置程序进程执行优先权)
函数说明 setpriority()可用来设置进程、进程组和用户的进程执行优先权。参数which有三种数值,
PRIO_PGRP who为进程的组ID
PRIO_USER who为用户ID
参数prio介于-20 至20 之间。代表进程执行优先权,数值越低代表有较高的优先次序,执行会较频繁。
此优先权默认是0,而只有超级用户(root)允许降低此值。返回值 执行成功则返回0,如果有错误发生返回值则为-1,错误原因存于errno。 ESRCH 参数which或who 可能有错,而找不到符合的进程EINVAL 参数which值错误。EPERM 权限不够,无法完成设置 EACCES
一般用户无法降低优先权
函数说明 getpriority()可用来取得进程、进程组和用户的进程执行优先权。 参数 which有三种数值,参数who 则依which值有不同定义
which who 代表的意义
PRIO_PGRP who 为进程的组ID
PRIO_USER who 为用户ID
此函数返回的数值介于-20 至20之间,代表进程执行优先权,数值越低代表有较高的优先次序,执行会较频繁。 返回值 返回进程执行优先权,如有错误发生返回值则为-1 且错误原因存于errno。附加说明 由于返回值有可能是-1,因此要同时检查errno是否存有错误原因。最好在调用次函数前先清除errno变量。错误代码 ESRCH 参数which或who 可能有错,而找不到符合的进程。EINVAL 参数which 值错误。
函数说明:一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。
fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。
注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,它们之间共享的存储空间只有代码段。
1) fork要拷贝父进程的数据段;而vfork则不需要完全拷贝父进程的数据段,在子进程没有调用exec和exit之前,子进程与父进程共享数据段
2) fork不对父子进程的执行次序进行任何限制;而在vfork调用中,子进程先运行,父进程挂起,直到子进程调用了exec或exit之后,父子进程的执行次序才不再有限制
函数说明:wait()函数的工作过程是:先判断子进程是否存在,即是否成功创建了一个子进程。如果创建失败,则会直接退出并提示相关错误信息,并返回-1;如果创建成功,wait()将父进程挂起,直到子进程结束,并返回子进程结束时的状态和PID。
如果不在意结束状态值,则参数status 可以设成NULL。
返回值:如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno 中。
函数说明: waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用 wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。
子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数status 可以设成NULL。参数pid 为欲等待的子进程识别码,其他数值意义如下:
pid<-1 等待进程组识别码为pid 绝对值的任何子进程。
pid=-1 等待任何子进程,相当于wait()。
pid=0 等待进程组识别码与目前进程相同的任何子进程。
pid>0 等待任何子进程识别码为pid 的子进程。
参数option 可以为0 或下面的OR 组合:
WNOHANG 如果没有任何已经结束的子进程则马上返回,不予以等待。
WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。
子进程的结束状态返回后存于status,底下有几个宏可判别结束情况:
WIFEXITED(status)如果子进程正常结束则为非0值。
WEXITSTATUS(status)取得子进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。
WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真。
WTERMSIG(status) 取得子进程因信号而中止的信号代码,一般会先用WIFSIGNALED 来判断后才使用此宏。
WIFSTOPPED(status) 如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。
WSTOPSIG(status) 取得引发子进程暂停的信号代码,一般会先用WIFSTOPPED 来判断后才使用此宏。
1、管道(pipe)和有名管道(FIFO)
4)有名管道创建
#include<sys/types.h>
#include<sys/stat.h>
int mkfifo(const char *pathname,mode_t mode);
返回:若成功则为0,若出错返回-1
一旦已经用mkfifo创建了一个FIFO,就可用open打开它。确实,一般的文件I/O函数(close,read,write,unlink等)都可用于FIFO。当打开一个FIFO时,非阻塞标(O_NONBLOCK)产生下列影响:
A、在一般情况中(没有说明O_NONBLOCK),只读打开要阻塞到某个其他进程为写打开此FIFO。类似,为写而打开一个FIFO要阻塞到某个其他进程为读而打开它。
B、如果指一了O_NONBLOCK,则只读打开立即返回。但是,如果没有进程已经为读而打开一个FIFO,那么只写打开将出错返回,其errno是ENXIO。类似于管道,若写一个尚无进程为读而打开的FIFO,则产生信号SIGPIPE。若某个FIFO的最后一个写进程关闭了该FIFO,则将为该FIFO的读进程产生一个文件结束标志。
FIFO相关出错信息:EACCES(无存取权限)EEXIST(指定文件不存在)
ENAMETOOLONG(路径名太长)
ENOENT(包含的目录不存在)
ENOSPC(文件系统余空间不足)
ENOTDIR(文件路径无效)
EROFS(指定的文件存在于只读文件系统中)
linux下进程相关操作的更多相关文章
- Linux下 svn相关操作
		
Linux下 svn相关操作 一.首先看看svn安装的位置: 命令: find / -name svn /var/svn :表示安装目录 /user/bin/svn :表示命令目录 可以看到的是svn ...
 - Linux下mysql相关操作
		
Linux下mysql相关操作 1.创建MySQL mysql -u root -p create user 'username'@'%' identified by 'password'; %可以选 ...
 - Linux下tomcat相关操作
		
tomcat安装: 直接到官网下载tar包解压即可. tomcat相关操作: 首先,进入Tomcat下的bin目录,例如:cd /usr/tomcat/bin 启动Tomcat:./startup.s ...
 - 【转】linux下nginx相关操作
		
参考文章 <nginx启动,重启,关闭命令> 停止操作 停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的 步骤1:查询nginx主进程号 ps -ef | ...
 - linux下终止相关操作
		
Ctrl c 中止当前正在执行的程序. Ctrl d 相当于exit命令,退出当前会话. Ctrl z 将当前运行的程序放到后台运行.与运行时加&类似.
 - Linux下进程隐藏的方法及其对抗
		
零.背景 在应急响应中,经常碰到ps命令和top命令查不到恶意进程(异常进程)的情况,会对应急响应造成很大的影响.轻则浪费时间,重则排查不出问题,让黑客逍遥法外.所以这篇博客研究学习如何对抗linux ...
 - 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)
		
在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通 ...
 - 【Linux】Linux下进程间的通信方式
		
本文内容: 1.进程通信的目的 2.介绍Linux下进程间的4种通信方式:管道,消息队列,共享内存,信号量 ps:套接字也可以用于进程间的通信,不过是不同物理机器上的进程通信,本章讨论是是同一台物理机 ...
 - Linux下进程间管道通信小作业
		
在进行这次作业之前,我们先来看看什么是管道吧! 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间, ...
 
随机推荐
- HTTP Header 详解【转】
			
原文出自:http://kb.cnblogs.com/page/92320/ HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用 ...
 - V9任何页面GET调用内容分页的说明
			
如标题,很多人想要在网站首页或其他的页面实现分页效果,说明如下: 一般特殊页面实现分页是通过GET语句的(论坛很多牛人用修改PHPCMS系统函数来实现,个人不推荐,因为你改了系统文件,不利于官方下一步 ...
 - 1027	Colors in Mars (20)
			
#include <stdio.h> #include <map> using namespace std; int main() { int R,G,B,i; map< ...
 - web.xml中JSP配置及 EL表达式
			
web.xml 中JSP配置.servlet配置 及 EL表达式 [摘要] servlet 基本配置 <servlet> <servlet-name>LoginServlet& ...
 - Mysql数据库备份和还原常用的命令
			
Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...
 - oracle linux了解基本命令行
			
1. Linux的版本:核心(kernel)版本和发行(distribution)版本 2. 复制.删除和移动文件的命令 cp [选项] 源文件或目录 目标文件或目录 -R,-r ...
 - jQuery ajax 实现分页 kkpager插件
			
代码片段一: <!--分页组件 JS CSS 开始--> <!--分页组件 CSS--> <link type="text/css" href=&qu ...
 - redis缓存的安装和使用
			
Redis介绍 Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是s ...
 - uxpin books
			
http://uxpin.com/knowledge.html/?utm_source=Email+Marketing+Automation&utm_campaign=80d94e146a-l ...
 - Guide to Database Migration from Microsoft SQL Server using MySQL Workbench
			
http://mysqlworkbench.org/2012/07/migrating-from-ms-sql-server-to-mysql-using-workbench-migration-wi ...