LINUX进程控制(1)
1. Linux进程概述 进程是程序的执行实例,它是Linux的基本调度单位.一个进程由如下元素组成: 程序的当前上下文,即程序的当前执行状态; 程序的当前执行目录 程序访问的文件和目录 程序的访问权限,比如它的文件模式和所有权 内存和其他分配给进程的系统资源 内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序,运行多久以及采用什么特性运行它.内核的调度器负责在所有的进程间分配CPU执行时间,称为时间片(time slice),它轮流在每个进程分得的时间片用完后从进程那里抢回控制权. 1.1. 进程标1.2. 识 OS会为每个进程分配一个唯一的整型ID,做为进程的标识号(pid).进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,ID为1,init进程是内核自举后的一个启动的进程.init进程负责引导系统、启动守护(后台)进程并且运行必要的程序. 进程的pid和ppid可以分别通过函数getpid()和getppid()获得. 示例: #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { printf("pid:%d ppid:%d\n",getpid(),getppid()); return 0; } 1.3. 进程的用户ID与组ID(进程的运行身份) 进程在运行过程中,具有一类似于用户的身份,以便进行进程的权限控制,缺省情况下,哪个登录用户运行程序,该程序进程就具有该用户的身份.例如,假设当前登录用户为gotter,他运行了ls程序,则ls在运行过程中就具有gotter的身份,该ls进程的用户ID和组ID分别为gotter和gotter所属的组.这类型的ID叫做进程的真实用户ID和真实组ID.真实用户ID和真实组ID可以通过函数getuid()和getgid()获得. 与真实ID对应,进程还具有有效用户ID和有效组ID的属性,内核对进程的访问权限检查时,它检查的是进程的有效用户ID和有效组ID,而不是真实用户ID和真实组ID.缺省情况下,用户的(有效用户ID和有效组ID)与(真实用户ID和真实组ID)是相同的.有效用户id和有效组id通过函数geteuid()和getegid()获得. 拥有帝国一切,皆有可能。欢迎访问phome.net 示例 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { printf("uid:%d gid:%d euid:%d egid:%d\n", getuid(),getgid(),geteuid(),getegid()); return 0; } 开始时登录用户为ghaha(uid为500): shell>id uid=500(ghaha) gid=500(ghaha) groups=500(ghaha) 编译生成可执行文件a.out,程序文件的属性可能为: -rwxrwxr-x 1 ghaha ghaha 12132 Oct 7 09:26 a.out 执行结果可能为: shell>a.out uid:500 gid:500 euid:500 egid:500 现在将a.out的所有者可执行属性改为s shell>chmod u s a.out shell>ll -rwsrwxr-x 1 ghaha ghaha 12132 Oct 7 09:26 a.out 此时改另外一个用户gotter登录并运行程序a.out shell>id uid=502(gotter) gid=502(gotter) groups=502(gotter) shell>a.out uid:502 gid:502 euid:500 egid:502 可以看到,进程的有效用户身份变为了ghaha,而不是gotter了,这是文件a.out的访问权限的所有者可执行为设置了s的属性,设置了改属性以后,用户运行a.out时,a.out进程的有效用户身份将不再是运行a.out的用户,而是a.out文件的所有者. s权限最常见的例子是 /usr/bin/passwd程序,它的权限位为 shell>ll /usr/bin/passwd -r-s--x--x 1 root root |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |