Linux系统编程进程管理
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代码
相应的以下两个系统调用返回有效用户和组的ID: Cpp代码
这两组系统调用不会失败. 5、会话和进程组: 每个进程都属于某个进程组,进程组是由一个或者多个相互间有关联的进程组成,它的目的是为了作业控制. 进程组的主要特征是信号可以给进程组中的所有的进程:这个信号使同一个进程组中的所有进程终止、停止 或者继续运行. 每一个进程组都由进程组ID(pgid)唯一来标识,并且有一个组长进程(process goup leader),进程组的ID 就是组长进程的pid.只要在某个进程组中还有一个进程存在,则该进程组就存在,即使组长进程终止了,该进程 仍然存在. 当新的用户登录计算机时,登录进程就会为这个用户创建一个新的会话.这个会话中只有用户登录shell这一个进程. 登录shell作为会话首进程(session leader).会话囊括了登录用户的所有活动,并且分配给用户一个控制终端. 1)与会话相关的系统调用: 在登录时,shell会创建新的会话.这是通过以下系统调用完成的: Cpp代码
setsid创建的新会话,并在其中创建一个新的进程组,调用进程称为新会话的首进程和进程组的组长进程. 成功返回,新会话的会话ID,错误时,返回-1,并把errno设置成EPERM,表示调用进程是当前进程组的组长进程. 有一个简单的方法可以任何进程都不成为组长进程:创建一个新进程,终止父进程,让子进程来调用setsid. 例如: Cpp代码
成功返回pid进程组的ID.如果pid是0,返回当前进程的进程组ID,出 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |