linux进程管理

系统运行的第一个进程init(PID为1)由内核产生,以后所有的进程都由fork()创建,PID依次增加

进程资源由两部分组成:内核空间进程资源,用户空间进程资源

  1. 内核空间进程资源包括:进程控制块本身PCB,打开的文件表项files_struct,当前目录,当前终端tty_struct,线程基本信息,可访问的内存地址空间,PID进程号,PPID父进程号,UID用户号,EUID有效用户号等。这些资源只能通过系统调用才能访问,即当前进程退出后只能由另一进程来回收。
  2. 用户空间进程资源包括:堆,栈,进程的代码段,数据段,可共享访问的库的内存空间。这些资源进程可以直接访问,在进程退出时主动释放。

进程状态:内核级进程状态——TASK_RUNNING正在运行或已经就绪(进程除了CPU已经具备其他所有资源),

              TASK_INTERRUPTIBLE等待资源有效时环形,也可被中断唤醒,

              TASK_UNINTERRUPTIBLE等待资源有效时唤醒,不可被中断唤醒,

              TASK_STOPPED被外部程序暂停,当再次允许时继续执行,

              TASK_TRACED,EXIT_ZOMBLE,EXIT_DEAD

    用户空间进程状态——TASK_RUNNING正在运行或已经就绪(进程除了CPU已经具备其他所有资源),

              TASK_INTERRUPTIBLE等待资源有效时环形,也可被中断唤醒,

              TASK_UNINTERRUPTIBLE等待资源有效时唤醒,不可被中断唤醒,

              TASK_STOPPED被外部程序暂停,当再次允许时继续执行,

              TASK_ZOMBLE进程资源空间被释放,但内核中进程PCB没有被释放,等待父进程回收

进程基本属性:

  1. 进程号PID,唯一标识一个进程。getpid()获得当前进程的PID
  2. 父进程号PPID,getppid()获得当前进程的父进程号
  3. 进程组号PGID,进程组是一个或多个进程的集合,他们和同一个作业相关连,可以接受来自同一终端的各种信号,通过getpgid(进程号——0表示当前进程),通过setpgid()将某个进程加到某个进程组。一个进程只能为自己或者子进程设置进程组号PGID,在他的子进程调用了exec()函数后,就不能在改变进程组号了。
 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 int main(int argc,char *argv[])
 5 {
 6         printf("the current program's pid is %d\n",getpid());
 7         printf("the current program's ppid is %d\n",getppid());
 8         printf("the current program's pgid is %d\n",getpgid(0));
 9         return 0;
10         }

[root@sun PCB]# ./getpid
the current program's pid is 3114
the current program's ppid is 2990
the current program's pgid is 3114

[root@sun PCB]# ps aux

root      2982  0.0  0.2 163064  4296 pts/0    S    18:37   0:00 su
root      2990  0.0  0.0 108468  1868 pts/0    S    18:37   0:00 bash
root      3117  2.0  0.0 110240  1128 pts/0    R+   19:11   0:00 ps aux

4.会话session

会话是一个或多个进程组的集合,

getsid(进程组号——0指调用进程的会话号SID)获取某进程的会话号SID;

setsid()创建新会话,即修改某进程的会话号SID。但是如果这个进程是进程组的组长进程,则函数返回错误。如果成功创建一个新会话,则创建会话的进程会变成新会话的首进程,新进程组的组长进程,与之前进程的控制终端断开联系后便没有控制终端

 5.控制终端

 

进程的用户属性:

用户号UID

1.进程真实用户号RUID=创建该进程的用户号UID

getuid()获取当前进程的RUID

2.进程的有效用户号EUID

主要用于权限检查

在设置了setuid权限位后,其他用户在执行该文件时具有该文件拥有者对该文件的访问权限,所以在设置了setuid位有效后,当有除了该文件拥有者之外的用户运行该程序时,EUID不相同UID,其他时候都是相同的。

3.进程用户组号GID

创建进程的用户所在的组号为该进程的进程用户组号,可以通过getgid()获取

4.有效进程用户组号EGID

一般情况下EGID与GID相同,但是当可执行文件设置了setuid权限位之后,无论任何用户包括root执行此程序时,EGID是该文件的拥有者所在的组

 

 

转载于:https://www.cnblogs.com/sunshineKID/p/3478102.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值