第17章 程序管理与SELinux初探

Posted 且听风吟-wuchao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第17章 程序管理与SELinux初探相关的知识,希望对你有一定的参考价值。

什么是进程

触发任何一个事件时,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时依据触发这个进程的用户与相关属性关系,给予这个进程一组有效的权限设置。

进程与程序

进程:执行一个程序或命令就可以触发一个事件而取得一个PID。

程序:系统仅仅认识二进制文件,当系统工作时,需要启动一个二进制文件,这个文件就是程序。

 

程序放在磁盘中,通过用户的执行来触发。触发后加载到内存中成为一个个体,这就是进程。每个进程有给予执行者的权限/属性等参数,并包括进程所需要的脚本与数据,最后再给予一个PID。

 

子进程与父进程:当我们登陆系统后,会取得一个bash的shell,然后利用这个bash提供的接口去执行另一个命令,那些另外执行的命令也会被触发称为PID,那个后来执行的命令产生的PID就是子进程。判断一个进程的父进程可以通过Parent PID (PPID)来判断。

 

//查看当前进程状态
[[email protected] 桌面]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   4177   4169  0  80   0 - 29168 wait   pts/0    00:00:00 bash
0 R     0   6631   4177  0  80   0 - 34343 -      pts/0    00:00:00 ps
//在当前bash下打开新的bash,即子进程
[[email protected] 桌面]# bash
//再次查看进程状态
[[email protected] 桌面]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   4177   4169  0  80   0 - 29168 wait   pts/0    00:00:00 bash
4 S     0   6635   4177  3  80   0 - 29170 wait   pts/0    00:00:00 bash
0 R     0   6667   6635  0  80   0 - 34343 -      pts/0    00:00:00 ps
[[email protected] 桌面]# 

 

fork and exec:过程调用流程,进程之间需要互相调用时,进程都会通过父进程以复制(fork)的方式产生一个一模一样的子进程,该子进程再以exec的方式执行实际需要进行的进程。

 工作管理(job control)

当我们登陆系统取得bash shell之后,在单一终端机下同时进行多个工作的行为管理。

job control的管理

要进行bash的job control必须注意以下的限制:

  • 这些工作所触发的进程必须来自于你shell的子进程(只管理自己的bash)
  • 前台:你可以控制与执行命令的环境称为前台(foreground)的工作
  • 后台:可以自行运行的工作,你无法control+c终止它,可使用bg/fg调用该工作
  • 后台中“执行”的进程不能等待terminal/shell的输入

job控制命令

1. 直接将命令丢到后台中执行的 &

在我们只有一个bash的环境下想要执行多个工作,可以将某些工作直接丢到后台当中,使用“&”表示。

[[email protected] 桌面]# tar -zpcf /tmp/etc.tar.gz /etc &
[1] 15349
[[email protected] 桌面]# tar: 从成员名中删除开头的“/”

[1]+  完成                  tar -zpcf /tmp/etc.tar.gz /etc

上面的[1]是bash给予该命令的工作号,15349是该命令的PID。

上面指令没用数据流重定向,因此错误信息会显示出来,修改命令如下:

[[email protected] 桌面]# tar -zpcf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
[1] 15590
[[email protected] 桌面]# 
[[email protected] 桌面]# 
[1]+  完成                  tar -zpcf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1
[[email protected] 桌面]# cat /tmp/log.txt
tar: 从成员名中删除开头的“/”
[[email protected] 桌面]# 

上述代码将数据流重定向到/tmp/log.txt文件中,2>&1表示将标准输出和错误输出指向同一个文件,cat指令可以看到该文件的内容。

2. 将目前的工作丢到后台中“暂停”:ctrl+z

如果正在使用vi,此时想要去查找一个文件,并不需要结束vi,只需要将vi丢到后台。

[[email protected] 桌面]# vim ~/.bashrc

//点击ctrl+z暂停vim

[1]+  已停止               vim ~/.bashrc
[[email protected] 桌面]# find ~/script -print
/root/script
/root/script/sh01.sh
/root/script/sh02.sh
/root/script/sh03.sh
……

//查看后台进程,+表示最近被丢到后台的进程
[[email protected] 桌面]# jobs -ls
[1]+ 16025 停止                  vim ~/.bashrc

 

3. 将后台工作拿到前台处理:fg

使用“fg %jobnumber”可以将后台工作拿到前台(直接使用fg则取得的是最后一次放入到后台的进程)。

4. 让工作在后台下的状态变成运行中:bg

前面提到可以使用ctrl+z将当前工作丢到后台中“暂停”,可以使用“bg %jobnumber”使之在后台运行。

5. 管理后台当中的工作:kill

kill -signal %jobnumber

kill -signal PID

参数:

-l:列出目前kill能够使用的信号

signal:代表给予后面接的那个工作什么样的指示。用man 7 signal可知:

-1:重新读取一次参数的配置文件

-2:代表与由键盘输入ctrl+c同样的操作

-9:立刻强制删除一个工作

-15:以正常的程序方式终止工作。

[[email protected] 桌面]# kill -l
 1) SIGHUP        2) SIGINT          3) SIGQUIT        4) SIGILL         5) SIGTRAP
 6) SIGABRT       7) SIGBUS          8) SIGFPE         9) SIGKILL        10) SIGUSR1
11) SIGSEGV      12) SIGUSR2        13) SIGPIPE       14) SIGALRM        15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD        18) SIGCONT       19) SIGSTOP        20) SIGTSTP
21) SIGTTIN      22) SIGTTOU        23) SIGURG        24) SIGXCPU        25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF        28) SIGWINCH      29) SIGIO          30) SIGPWR
31) SIGSYS       34) SIGRTMIN       35) SIGRTMIN+1    36) SIGRTMIN+2     37) SIGRTMIN+3
38) SIGRTMIN+4     39) SIGRTMIN+5    40) SIGRTMIN+6     41) SIGRTMIN+7     42) SIGRTMIN+8
43) SIGRTMIN+9     44) SIGRTMIN+10   45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15   50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10   55) SIGRTMAX-9     56) SIGRTMAX-8     57) SIGRTMAX-7
58) SIGRTMAX-6     59) SIGRTMAX-5    60) SIGRTMAX-4     61) SIGRTMAX-3     62) SIGRTMAX-2
63) SIGRTMAX-1     64) SIGRTMAX    

举例:

[[email protected] 桌面]# jobs -ls
[1]+ 16025 停止                  vim ~/.bashrc
[[email protected] 桌面]# kill -9 %1
[1]+  已杀死               vim ~/.bashrc
[[email protected] 桌面]# jobs
[[email protected] 桌面]# 

脱机管理问题

我们在工作管理中提到的后台并不是系统的后台,而是指在终端机模式下可以避免ctrl+c中断的情景。工作管理的后台依旧与终端机有关。远程连接的方式连接到linux主机并且以工作方式&的方法放到后台的工作在脱机以后便会终止。

nohup可以让你在脱机或注销系统后,还能让工作继续进行。

nohup [命令与参数] :在终端机前台工作

nohup [命令与参数]  &:在终端机后台工作

进程管理

进程的查看

ps:将某个时间点的进程运行情况选取下来

ps aux:查看系统所有进程

ps -lA:同上

ps axjf:连同部分进程树状态

[[email protected] 桌面]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2 191644  6948 ?        Ss   01:19   0:27 /usr/lib/syste
root          2  0.0  0.0      0     0 ?        S    01:19   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    01:19   0:01 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   01:19   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    01:19   0:08 [migration/0]
root          8  0.0  0.0      0     0 ?        S    01:19   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/0]
root         10  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/1]
root         11  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/2]
root         12  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/3]
root         13  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/4]
root         14  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/5]
root         15  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/6]
root         16  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/7]
root         17  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/8]
root         18  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/9]
root         19  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/10]
root         20  0.0  0.0      0     0 ?        S    01:19   0:00 [rcuob/11]
……
[[email protected] 桌面]# ps -lA
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0      1      0  0  80   0 - 47911 ep_pol ?        00:00:27 systemd
1 S     0      2      0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0      3      2  0  80   0 -     0 smpboo ?        00:00:01 ksoftirqd/0
1 S     0      5      2  0  60 -20 -     0 worker ?        00:00:00 kworker/0:0H
1 S     0      7      2  0 -40   - -     0 smpboo ?        00:00:08 migration/0
1 S     0      8      2  0  80   0 -     0 rcu_gp ?        00:00:00 rcu_bh
1 S     0      9      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/0
1 S     0     10      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/1
1 S     0     11      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/2
1 S     0     12      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/3
1 S     0     13      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/4
1 S     0     14      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/5
1 S     0     15      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/6
1 S     0     16      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/7
1 S     0     17      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/8
1 S     0     18      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/9
1 S     0     19      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/10
1 S     0     20      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/11
1 S     0     21      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/12
1 S     0     22      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/13
1 S     0     23      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/14
1 S     0     24      2  0  80   0 -     0 rcu_no ?        00:00:00 rcuob/15
……
[[email protected] 桌面]# ps axjf
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
     0      2      0      0 ?            -1 S        0   0:00 [kthreadd]
     2      3      0      0 ?            -1 S        0   0:01  \_ [ksoftirqd/0]
     2      5      0      0 ?            -1 S<       0   0:00  \_ [kworker/0:0H]
     2      7      0      0 ?            -1 S        0   0:08  \_ [migration/0]
     2      8      0      0 ?            -1 S        0   0:00  \_ [rcu_bh]
     2      9      0      0 ?            -1 S        0   0:00  \_ [rcuob/0]
     2     10      0      0 ?            -1 S        0   0:00  \_ [rcuob/1]
     2     11      0      0 ?            -1 S        0   0:00  \_ [rcuob/2]
     2     12      0      0 ?            -1 S        0   0:00  \_ [rcuob/3]
     2     13      0      0 ?            -1 S        0   0:00  \_ [rcuob/4]
     2     14      0      0 ?            -1 S        0   0:00  \_ [rcuob/5]
     2     15      0      0 ?            -1 S        0   0:00  \_ [rcuob/6]
     0      1      1      1 ?            -1 Ss       0   0:27 /usr/lib/systemd/s
     1    758    758    758 ?            -1 Ss       0   0:07 /usr/lib/systemd/s
     1    776    776    776 ?            -1 Ss       0   0:00 /usr/sbin/lvmetad 
     1    790    790    790 ?            -1 Ss       0   0:02 /usr/lib/systemd/s
     1    916    916    916 ?            -1 S<sl     0   0:01 /sbin/auditd -n
   916    933    933    933 ?            -1 S<sl     0   0:00  \_ /sbin/audispd
   933    937    933    933 ?            -1 S<       0   0:00      \_ /usr/sbin/
     1    940    940    940 ?            -1 SNs      0   0:00 /usr/sbin/alsactl 
     1    942    942    942 ?            -1 Ssl      0   3:06 /usr/bin/vmtoolsd
     1    943    943    943 ?            -1 Ssl      0   0:02 /usr/sbin/rsyslogd
     1    945    945    945 ?            -1 Ss       0   0:00 /usr/sbin/abrtd -d
     1    946    946    946 ?            -1 SNsl   172   0:25 /usr/libexec/rtkit
  1453   2057   2057   2057 tty1       2057 Rsl+     0  11:50  \_ /usr/bin/Xorg 
  1453   3338   1453   1453 ?            -1 Sl       0   0:01  \_ gdm-session-wo
  3338   3385   3385   3385 ?            -1 Ssl      0   0:01      \_ gnome-sess
  3385   3538   3538   3538 ?            -1 Ss       0   0:02          \_ /usr/b
  3385   3570   3385   3385 ?            -1 Sl       0   0:13          \_ /usr/l
  3385   3608   3385   3385 ?            -1 Rl       0  45:39          \_ /usr/b
  3608   3635   3635   3385 ?            -1 Sl       0   1:59          |   \_ ib
  3635   3640   3635   3385 ?            -1 Sl       0   0:00          |   |     3635   4057   3635   3385 ?            -1 Sl       0   0:00          |   |     3635   5438   3635   3385 ?            -1 Sl       0   1:05          |   |     3608   5257   3385   3385 ?            -1 Sl       0  21:16          |   \_ /u
  3385   3705   3385   3385 ?            -1 Sl       0   0:42          \_ nautil
  3385   3710   3385   3385 ?            -1 SNl      0   0:00          \_ /usr/l
  3385   3713   3385   3385 ?            -1 Sl       0   0:04          \_ /usr/b
  3385   3717   3385   3385 ?            -1 S        0   0:00          \_ /usr/b
  3385   3732   3385   3385 ?            -1 Sl       0   0:04          \_ abrt-a
  3385   3734   3385   3385 ?            -1 SNl      0   0:00          \_ /usr/l
  3385   3735   3385   3385 ?            -1 SNl      0   0:00          \_ /usr/l
  3385   3738   3385   3385 ?            -1 SNl      0   0:02          \_ /usr/l
[[email protected] 桌面]# 

仅查看自己的bash的进程:ps -l

[[email protected] 桌面]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  16877   4169  0  80   0 - 29168 wait   pts/1    00:00:00 bash
0 R     0  17074  16877  0  80   0 - 34343 -      pts/1    00:00:00 ps

F:代表进程标志,说明这个进程的权限,4为root权限,1表示此子进程仅可以进行复制(fork)而无法实际执行(exec)

S:进程的状态,R表所运行,S表示睡眠但可唤醒,D表示不可被唤醒的睡眠状态,T表示停止状态,Z表示僵尸状态,已经终止但无法删除

C:cpu使用率

PRI/NI:进程被cpu执行的优先级

TIME:使用掉CPU的时间

 

top:动态查看进程的变化

top [-d 数字] | top [-bnp]

参数:

 

 

 

 

 

 

 

 

 

 

以上是关于第17章 程序管理与SELinux初探的主要内容,如果未能解决你的问题,请参考以下文章

程序管理与SELinux初探

程序管理与SELinux初探

程序管理与SELinux初探

鸟哥私房菜基础篇:程序管理与 SELinux 初探习题

Linux命令应用大词典-第29章 SELinux管理

SELinux初探 (读鸟哥笔记)欢迎指出错误