快速业务通道

Linux系统编程进程管理

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13

seteuid是将有效用户ID的值设置为euid.root用户可以为euid提供任何值,而非root用户只能将有效用户ID设置设置为实际用户


ID或者保存设施的用户ID.成功返回0,失败返回-1,并且把errno设置为EPERM,它代表当前进程的所有者不是root用户,并且euid


既不等于用户ID也不同于实际用户id也不等于保存用户id.


非root用户,seteuid和setuid的行为一样.始终使用seteuid()是一个标准实践和好的方法,除非你的进程倾向于以root身份运行,


这样setuid会变得更有意义.


4、获得用户和组ID:


以下两个系统调用返回真实用户和组的ID:


Cpp代码
  1. #include <unistd.h>
  2. #include <sys/type.h>
  3. uid_t getuid(void);
  4. gid_t getgid(void);

相应的以下两个系统调用返回有效用户和组的ID:


Cpp代码
  1. #include <unistd.h>
  2. #include <sys/type.h>
  3. uid_t geteuid(void);
  4. gid_t getegid(void);

这两组系统调用不会失败.


5、会话和进程组:


每个进程都属于某个进程组,进程组是由一个或者多个相互间有关联的进程组成,它的目的是为了作业控制.


进程组的主要特征是信号可以给进程组中的所有的进程:这个信号使同一个进程组中的所有进程终止、停止


或者继续运行.


每一个进程组都由进程组ID(pgid)唯一来标识,并且有一个组长进程(process goup leader),进程组的ID


就是组长进程的pid.只要在某个进程组中还有一个进程存在,则该进程组就存在,即使组长进程终止了,该进程


仍然存在.


当新的用户登录计算机时,登录进程就会为这个用户创建一个新的会话.这个会话中只有用户登录shell这一个进程.


登录shell作为会话首进程(session leader).会话囊括了登录用户的所有活动,并且分配给用户一个控制终端.


1)与会话相关的系统调用:


在登录时,shell会创建新的会话.这是通过以下系统调用完成的:


Cpp代码
  1. #include <unistd.h>
  2. pid_t setsid(void);

setsid创建的新会话,并在其中创建一个新的进程组,调用进程称为新会话的首进程和进程组的组长进程.


成功返回,新会话的会话ID,错误时,返回-1,并把errno设置成EPERM,表示调用进程是当前进程组的组长进程.


有一个简单的方法可以任何进程都不成为组长进程:创建一个新进程,终止父进程,让子进程来调用setsid.


例如:


Cpp代码
  1. pid_t pid;
  2. pid = fork();
  3. if(pid == -1){
  4. perror(

成功返回pid进程组的ID.如果pid是0,返回当前进程的进程组ID,出

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号