进程的概述
程序运行,这个程序运行的过程就是进程?
系统会给进程分配了 内存空间
分配了安全属性 运行的身份和权限
分配了系统的资源 文件描述符 进程描述符 网络端口 ID号 PID PPID
系统会记录进程的运行中的状态 STATAE
进程和程序有什么区别
程序是指令和数据的有序集合 静态的概念 永久存在的
进程是程序在主机上面运行的一个过程 动态的概念 会随着程序的创建,运行,终止,消除而终止 临时
进程是有生命周期
进程的运行过程:
用户运行了一个程序,系统会给进程分配任务,进程会通过fork一个子进程,子进程会继承父进程的衣钵,子进程处理具体的任务,父进程就会进入等待状态,子进程任务结束,回来向父进程交任务,子进程正常退出
子进程在执行任务时,父进程因为意外原因退出了,那么子进程就会变成无人管理,就是僵尸进程
每个进程都有自己的代号 ID号 子进程 PID 父进程 PPID
进程的状态
ps 显示进程的命令 静态显示
ps
选项:
a
u
x
aux
-e
-f
-ef
[ root@zzc ~]
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 125420 2112 ? Ss Aug03 0:03 /usr/lib/systemd/systemd --switched-root --system --des
root 2 0.0 0.0 0 0 ? S Aug03 0:00 [ kthreadd]
root 3 0.0 0.0 0 0 ? S Aug03 0:00 [ ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Aug03 0:00 [ kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Aug03 0:00 [ migration/0]
root 8 0.0 0.0 0 0 ? S Aug03 0:00 [ rcu_bh]
root 9 0.0 0.0 0 0 ? R Aug03 0:07 [ rcu_sched]
root 10 0.0 0.0 0 0 ? S< Aug03 0:00 [ lru-add-drain]
root 11 0.0 0.0 0 0 ? S Aug03 0:00 [ watchdog/0]
USER
PID
PPID
%CPU
%MEM
VSZ
RSS
TTY
?
tty1
pts/0
STAT
S
R
D
T
Z
s
<
N
l
+
START
TIME
COMMAND
[ ]
无[ ]
[ root@zzc ~]
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug03 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 Aug03 ? 00:00:00 [ kthreadd]
root 3 2 0 Aug03 ? 00:00:00 [ ksoftirqd/0]
root 5 2 0 Aug03 ? 00:00:00 [ kworker/0:0H]
root 7 2 0 Aug03 ? 00:00:00 [ migration/0]
root 8 2 0 Aug03 ? 00:00:00 [ rcu_bh]
root 9 2 0 Aug03 ? 00:00:07 [ rcu_sched]
root 10 2 0 Aug03 ? 00:00:00 [ lru-add-drain]
案例1
[ root@zzc ~]
[ root@zzc ~]
root 12592 0.2 0.2 149168 4996 pts/0 S+ 09:04 0:00 vim test.log
[ root@zzc ~]
root 12592 0.1 0.2 149168 4996 pts/0 S+ 09:04 0:00 vim test.log
[ root@zzc ~]
[ 1] + Stopped vim test.log
[ root@zzc ~]
root 12592 0.0 0.2 149168 4996 pts/0 T 09:04 0:00 vim test.log
案例二
[ root@zzc ~]
tar: Removing leading ` /' from member names
tar: Removing leading ` /' from hard link targets
[ root@zzc ~]
root 12617 7.0 0.0 123408 1352 pts/0 R+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 12617 6.0 0.0 123408 1352 pts/0 D+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 12617 6.2 0.0 123540 1352 pts/0 R+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 12617 5.8 0.0 123540 1352 pts/0 D+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 12617 5.5 0.0 123540 1352 pts/0 D+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 12617 6.5 0.0 123540 1352 pts/0 S+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 12617 5.8 0.0 123540 1352 pts/0 S+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 12617 6.1 0.0 123540 1352 pts/0 R+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[ root@zzc ~]
root 7193 0.0 5.4 225028 111152 pts/0 Ss Aug03 0:04 -bash
root 12575 0.0 0.1 115572 2120 pts/1 Ss+ 09:04 0:00 -bash
root 12641 0.0 5.4 225028 110280 pts/0 R+ 09:09 0:00 -bash
案例三
[ root@zzc ~]
int main( int argc, char *argv[ ] )
{
pid_t pid;
pid = fork( ) ;
if ( pid == 0) {
int iPid = ( int) getpid( ) ;
fprintf( stderr,"I am child,%d\n" ,iPid) ;
sleep( 1) ;
fprintf( stderr, "Child exits\n" ) ;
return EXIT_SUCCESS;
}
int iPid = ( int) getpid( ) ;
fprintf( stderr,"I am parent,%d\n" ,iPid) ;
fprintf( stderr, "sleep....\n" ) ;
sleep( 600) ;
fprintf( stderr, "parent exits\n" ) ;
return EXIT_SUCCESS;
}
[ root@zzc ~]
[ root@zzc ~]
total 1218672
-rwxr-xr-x 1 root root 8696 Aug 4 09:11 a.out
-rw-r--r-- 1 root root 199327744 Aug 4 09:09 etc.tar.gz
-rw------- 1 root root 1048576000 Aug 3 11:22 swap.txt
-rw-r--r-- 1 root root 547 Aug 4 09:10 test.c
[ root@zzc ~]
I am parent,12655
sleep.. ..
I am child,12656
Child exits
^C
[ root@zzc ~]
root 12655 0.0 0.0 4208 352 pts/0 S+ 09:11 0:00 ./a.out
root 12656 0.0 0.0 0 0 pts/0 Z+ 09:11 0:00 [ a.out] < defunct>
top htop 动态显示进程状态
top htop
top命令的内部指令
h
q
P
M
1
top选项:
top -d 1
top -d 1 -p 1
top -d 1 -u postfix
[ root@zzc ~]
top - 09:33:58 up 23:31, 2 users, load average: 0.24, 0.10, 0.07
Tasks: 113 total, 1 running, 112 sleeping, 0 stopped, 0 zombie
%Cpu( s) : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2028088 total, 155648 free, 363844 used, 1508596 buff/cache
KiB Swap: 2097148 total, 2069756 free, 27392 used. 974036 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
top - 09:33:58 up 23:31, 2 users, load average: 0.24, 0.10, 0.07
09:33:58
up 23:31
2 users
load average: 0.24, 0.10, 0.07
Tasks: 113 total, 1 running, 112 sleeping, 0 stopped, 0 zombie
任务:
113 total,
1 running
112 sleeping
0 stopped
0 zombie
%Cpu( s) : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
系统各个状态所占用CPU的时间百分比
0.0 us
0.0 sy
0.0 ni
100.0 id
0.0 wa
0.0 hi
0.0 si
0.0 st
物理内存 总的 剩余的 已使用的 缓存和缓冲中的内存
KiB Mem : 2028088 total, 155648 free, 363844 used, 1508596 buff/cache
虚拟内存
KiB Swap: 2097148 total, 2069756 free, 27392 used. 974036 avail Mem
PID
USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEM
TIME+
COMMAND
[ root@zzc ~]
total used free shared buff/cache available
Mem: 1980 265 907 12 807 1114
Swap: 2047 29 2018
kill 管理系统中的信号输出
[ root@zzc ~]
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
1
2
9
15
18
20
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
root 13063 0.0 0.1 120796 2096 ? Ss 10:36 0:00 nginx: master process /usr/sbin/nginx
nginx 13064 0.2 0.1 121180 3128 ? S 10:36 0:00 nginx: worker process
[ root@zzc ~]
[ root@zzc ~]
root 13063 0.0 0.2 121452 5248 ? Ss 10:36 0:00 nginx: master process /usr/sbin/nginx
nginx 13070 0.0 0.1 121876 3836 ? S 10:37 0:00 nginx: worker process
[ root@zzc ~]
Active Internet connections ( only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13063/nginx: master
[ root@zzc ~]
[ root@zzc ~]
Active Internet connections ( only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 13063/nginx: master
[ root@zzc ~]
[ root@zzc ~]
root 13115 0.0 0.1 161988 2212 pts/1 S+ 10:41 0:00 top
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
root 13144 0.0 0.1 161984 2212 pts/1 S+ 10:44 0:00 top
[ root@zzc ~]
kill
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
nginx: no process found
[ root@zzc ~]
root 13264 0.0 0.2 149168 4972 pts/0 S+ 10:53 0:00 vim 123.txt
root 13265 0.1 0.2 149168 4972 pts/1 S+ 10:53 0:00 vim 123.log
[ root@zzc ~]
pkill
[ root@zzc ~]
root 13278 0.0 0.1 161988 2216 pts/0 S+ 10:56 0:00 top
root 13279 0.1 0.1 122396 2112 pts/1 S+ 10:56 0:00 htop
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
[ root@zzc ~]
root 6935 0.0 0.0 112756 1276 ? Ss Aug03 0:00 /usr/sbin/sshd -D
root 7191 0.0 0.0 161364 1616 ? Ss Aug03 0:00 sshd: root@pts/0
root 7193 0.0 5.4 225028 111168 pts/0 Ss+ Aug03 0:05 -bash
root 12573 0.0 0.2 161364 5936 ? Ss 09:04 0:00 sshd: root@pts/1
root 12575 0.0 0.1 115572 2196 pts/1 Ss 09:04 0:00 -bash
root 13215 0.0 0.2 161364 6056 ? Ss 10:50 0:00 sshd: root@pts/2
root 13217 0.0 0.1 115572 2184 pts/2 Ss 10:50 0:00 -bash
root 13296 0.0 0.0 113176 1196 pts/2 S+ 10:59 0:00 sh 123.txt
root 13299 0.0 0.0 113176 1216 ? Ss 10:59 0:00 /bin/sh -c /usr/sbin/ntpdate ntp.aliyun.com & > /dev/null
root 13302 0.0 0.0 112708 976 pts/1 R+ 10:59 0:00 grep --color= auto sh
[ root@zzc ~]
[ root@zzc ~]
systemd─┬─NetworkManager───2*[ { NetworkManager} ]
├─VGAuthService
├─auditd───{ auditd}
├─crond───crond───sh───ntpdate
├─dbus-daemon
├─firewalld───{ firewalld}
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─ping
├─polkitd───6*[ { polkitd} ]
├─rsyslogd───2*[ { rsyslogd} ]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[ { tuned} ]
├─vmtoolsd
└─vsftpd
如何将正在运行的进程放入后台执行
& 放在一个命令的最后, 可以把这个命令放到后台去执行
[ root@zzc ~]
[ 1] 7515
nohup 忽略挂起信号运行指定的命令
[ root@zzc ~]
[ 2] 7889
[ root@zzc ~]
[ root@zzc ~]
[ 1] + Stopped vi
[ 2] - Running nohup ping baidu.com &
[ root@zzc ~]
total 12
-rw-r--r-- 1 root root 11 Aug 5 19:59 2.txt
-rw-r--r-- 1 root root 128 Aug 5 20:23 2.txt.tar.gz
-rw------- 1 root root 3182 Aug 6 09:36 nohup.out
ctrl + z 快捷键
[ root@zzc ~]
[ 2] + Stopped vi
jobs 查看当前后台运行的进程
[ root@zzc ~]
[ 1] + Stopped vi
[ 2] - Running nohup ping baidu.com &
fg 将后台程序放入到前台运行
[ root@zzc ~]
[ 1] + Stopped vi
[ root@qls ~]
vi
~
~
~
~
~
~
~
Type :quit< Enter> to exit Vim
bg 将暂停在后台的程序继续在后台运行 输出还是输出到屏幕上面
[ root@zzc ~]
[ 1] 8016
[ root@zzc ~]
64 bytes from 220.181.38.148 ( 220.181.38.148) : icmp_seq= 1 ttl= 128 time= 45.3 ms
64 bytes from 220.181.38.148 ( 220.181.38.148) : icmp_seq= 2 ttl= 128 time= 36.3 ms
[ root@zzc ~]
root 8016 0.0 0.1 149968 1988 pts/3 S 09:54 0:00 ping baidu.com
[ root@zzc ~]
[ root@zzc ~]
[ 1] + Stopped ping baidu.com
[ root@zzc ~]
[ 1] + ping baidu.com &
[ root@zzc ~]
64 bytes from 220.181.38.148 ( 220.181.38.148) : icmp_seq= 41 ttl= 128 time= 32.8 ms
64 bytes from 220.181.38.148 ( 220.181.38.148) : icmp_seq= 42 ttl= 128 time= 33.3 ms
screen 后台管理程序
screen
yum install screen
选项:
-ls或–list
-S
-r
-x
-xr
-d
ctrl + a + d
exit
[ root@zzc ~]
No Sockets found in /var/run/screen/S-root.
[ root@zzc ~]
[ root@zzc ~]
[ detached from 13659.vim]
[ root@zzc ~]
There is a screen on:
13659.vim ( Detached)
1 Socket in /var/run/screen/S-root.
[ root@zzc ~]
[ root@zzc ~]
[ detached from 13659.vim]
ctrl + a + d
exit
系统平均负载
[ root@zzc ~]
top - 11:54:48 up 1 day, 1:52, 3 users, load average: 0.00, 0.01, 0.05
[ root@zzc ~]
11:54:59 up 1 day, 1:52, 3 users, load average: 0.00, 0.01, 0.05
[ root@zzc ~]
11:55:09 up 1 day, 1:53, 3 users, load average: 0.00, 0.01, 0.05
1分钟 5分钟 15分钟 系统的平均负载
平均负载跟系统CPU的使用率没有太大关系
在单位时间内,系统正在运行中的进程数或者不可中断的进程数量 进程的活跃数量
跟CPU的核心数有关系
当负载为2的时候
核心数为4 50%
核心数为2 100%
核心数为1 200%
当1分钟的值小于5分钟和15分钟的时候 说明你之前的平均负载过高,当前正在降低
当1分钟跟5分钟和15分钟的值很近的时候,平均负载很稳定
当1分钟的值大于5分钟和15分钟的时候,说明现在的负载正在慢慢的变大
当值达到70% 就要开始分析问题