程序管理与SELinux初探
Posted wuchao0508
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序管理与SELinux初探相关的知识,希望对你有一定的参考价值。
什么是进程触发任何一个事件时,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时依据触发这个进程的用户与相关属性关系,给予这个进程一组有效的权限设置。
进程与程序
进程:执行一个程序或命令就可以触发一个事件而取得一个PID。
程序:系统仅仅认识二进制文件,当系统工作时,需要启动一个二进制文件,这个文件就是程序。
程序放在磁盘中,通过用户的执行来触发。触发后加载到内存中成为一个个体,这就是进程。每个进程有给予执行者的权限/属性等参数,并包括进程所需要的脚本与数据,最后再给予一个PID。
子进程与父进程:当我们登陆系统后,会取得一个bash的shell,然后利用这个bash提供的接口去执行另一个命令,那些另外执行的命令也会被触发称为PID,那个后来执行的命令产生的PID就是子进程。判断一个进程的父进程可以通过Parent PID (PPID)来判断。
//查看当前进程状态 [root@localhost 桌面]# 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,即子进程 [root@localhost 桌面]# bash //再次查看进程状态 [root@localhost 桌面]# 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 [root@localhost 桌面]#
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的环境下想要执行多个工作,可以将某些工作直接丢到后台当中,使用“&”表示。
[root@localhost 桌面]# tar -zpcf /tmp/etc.tar.gz /etc & [1] 15349 [root@localhost 桌面]# tar: 从成员名中删除开头的“/” [1]+ 完成 tar -zpcf /tmp/etc.tar.gz /etc
上面的[1]是bash给予该命令的工作号,15349是该命令的PID。
上面指令没用数据流重定向,因此错误信息会显示出来,修改命令如下:
[root@localhost 桌面]# tar -zpcf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 & [1] 15590 [root@localhost 桌面]# [root@localhost 桌面]# [1]+ 完成 tar -zpcf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 [root@localhost 桌面]# cat /tmp/log.txt tar: 从成员名中删除开头的“/” [root@localhost 桌面]#
上述代码将数据流重定向到/tmp/log.txt文件中,2>&1表示将标准输出和错误输出指向同一个文件,cat指令可以看到该文件的内容。
2. 将目前的工作丢到后台中“暂停”:ctrl+z
如果正在使用vi,此时想要去查找一个文件,并不需要结束vi,只需要将vi丢到后台。
[root@localhost 桌面]# vim ~/.bashrc //点击ctrl+z暂停vim [1]+ 已停止 vim ~/.bashrc [root@localhost 桌面]# find ~/script -print /root/script /root/script/sh01.sh /root/script/sh02.sh /root/script/sh03.sh …… //查看后台进程,+表示最近被丢到后台的进程 [root@localhost 桌面]# 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:以正常的程序方式终止工作。
[root@localhost 桌面]# 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
举例:
[root@localhost 桌面]# jobs -ls [1]+ 16025 停止 vim ~/.bashrc [root@localhost 桌面]# kill -9 %1 [1]+ 已杀死 vim ~/.bashrc [root@localhost 桌面]# jobs [root@localhost 桌面]#
脱机管理问题
我们在工作管理中提到的后台并不是系统的后台,而是指在终端机模式下可以避免ctrl+c中断的情景。工作管理的后台依旧与终端机有关。远程连接的方式连接到linux主机并且以工作方式&的方法放到后台的工作在脱机以后便会终止。
nohup可以让你在脱机或注销系统后,还能让工作继续进行。
nohup [命令与参数] :在终端机前台工作
nohup [命令与参数] &:在终端机后台工作
进程管理
进程的查看
ps:将某个时间点的进程运行情况选取下来
ps aux:查看系统所有进程
ps -lA:同上
ps axjf:连同部分进程树状态
[root@localhost 桌面]# 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] …… [root@localhost 桌面]# 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 …… [root@localhost 桌面]# 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 [root@localhost 桌面]#
仅查看自己的bash的进程:ps -l
[root@localhost 桌面]# 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]
参数:
-d:后面接更新秒数,默认5秒
-b:以批次的方式执行top
-n:与-b搭配,表示需要进行几次top的输出结果
-p:指定某些个PID来进行检测
在top执行过程中可使用以下按键命令:
?:显示top中可以输入的按键命令
P:以cpu的使用资源排序显示
M:以内存的使用资源排序
N:以PID排序
T:以进程的使用的CPU时间积累排序
k:给予某一个PID一个信号
r:给予某一个PID重新制定一个nice值
q:离开top软件的按键
范例1:
查看系统进程信息
top - 20:29:21 up 20:16, 3 users, load average: 0.27, 0.10, 0.13 Tasks: 442 total, 1 running, 441 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.3 us, 0.5 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 2865548 total, 1040848 free, 1111388 used, 713312 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 1421616 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3608 root 20 0 1875856 277860 52544 S 73.7 9.7 55:24.79 gnome-shell 2057 root 20 0 295816 77452 10940 S 26.3 2.7 15:09.70 Xorg 17700 root 20 0 146408 2248 1384 R 10.5 0.1 0:00.05 top 139 root 20 0 0 0 0 S 5.3 0.0 0:28.29 rcuos/1 3554 root 程序管理与SELinux初探