什么是进程?从用户的角度来看进程是程序的一次执行过程。从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。进程是资源分配的最小单位,每一个进程都有自己独立的地址空间与执行状态。像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程。
进程管理
进程:linux自身运行的独立程序
交互进程:有一个shell启动的进程,可以再前台运行,也可以在后台运行
批处理进程:是一个进程序列,和终端没有联系
守护进程(监控进程):linux系统启动时,启动并在后台运行的进程
1.PID:进程的ID(每一个新进程都有一个唯一的PID)
2.PPID:父进程的ID
3.任何一个进程都可以创建一个子进程
4.在redhat 7以上,所有的父进程:systemd;在redhat 5,6中,所有进程的父进程:init
top命令:查看实时的进程状态
[root@localhost ~]# top
ps命令:显示当前进程的状态
常用选项:
-aux:列出所有进程
-ef:列出所有进程(-aux格式不同)
-l:列出和当前用户有关的进程
-u:查看某一用户的进程状态
[root@localhost ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 3689 3656 0 80 0 - 51025 wait pts/0 00:00:00 su 4 S 0 3698 3689 0 80 0 - 29035 wait pts/0 00:00:00 bash 0 R 0 4150 3698 0 80 0 - 30315 - pts/0 00:00:00 ps [root@localhost ~]#
进程状态:
运行中:
R:该进程正在运行或等待运行
睡眠:
S:正在休眠但是可以被唤醒
D:正在休眠,而且不可以被唤醒,该进程被中断,可能会导致设备的异常状态
K:正在休眠,而且不可以被唤醒,该进程可以被中断
已停止:
T:进程被停止,但是可以通过其他进程来进行恢复(或者正在被调试的进程)
僵死:
Z:子进程在退出时向父进程发出信号,除PID外,所有资源全部释放
X:父进程获取子进程的结构,子进程可以完全释放,该状态进程中是看不到的
进程优先级:
<:高优先级
n:低优先级
s:包含子进程
+:位于后台的进程组
ps -aux参数解释:
%CPU:占用CPU使用率
%MEN:占用内存使用率
VSZ:占用的虚拟内存大小
RSS:占用的实际内存大小
TTY:终端的次要装置号码(minor device number of tty)
STAT:该进程的状态
START:进程开始时间
TIME:进程执行时间
COMMAND:所执行的命令
会话和作业
作业:一个正在执行的进程,而且作业可以包含一个或多个进程
作业控制:控制正在运行的进程的行为。如:挂起一个进程,等一会再执行。这样就可以在多个作业之间切换。
&:在命令后面使用该符号,可以让命令在后台执行
jobs:查看正在后台执行的作业
sleep 1000 延迟1000秒
ctrl+c:中断
ctrl+z:挂起
[root@localhost ~]# jobs [root@localhost ~]# sleep 1000 ^Z [1]+ Stopped sleep 1000 [root@localhost ~]# sleep 2000 & [2] 3252 [root@localhost ~]# jobs [1]+ Stopped sleep 1000 [2]- Running sleep 2000 & [root@localhost ~]# jobs -l [1]+ 3238 Stopped sleep 1000 [2]- 3252 Running sleep 2000 & [root@localhost ~]#
fg命令:将后台的命令调到前台继续执行,不能再放到后台了(%作业编号)
[root@localhost ~]# jobs -l [1]+ 3827 stop sleep 10000 [2]- 3856 running sleep 30000 & [root@localhost ~]# fg 2 sleep 30000 ^Z //ctrl+z 挂起进程 [2]+ stop sleep 30000 [root@localhost ~]# jobs [1]- stop sleep 10000 [2]+ stop sleep 30000
bg命令:将后台暂停的作业继续执行(%作业编号)
[root@localhost ~]# bg 2 [2]+ sleep 30000 & [root@localhost ~]# jobs [1]+ stop sleep 10000 [2]- running sleep 30000 & [root@localhost ~]#
ps -j:显示当前作业进程信息(TGID:线程组ID号 SID:会话ID号)
[root@localhost ~]# ps -j
kill命令:杀死进程
kill -l:显示可以传递给linux进程的所有信号
kill -9 PID:强制杀死一个进程
kill -15 PID:正常的方式终止一个进程
kill -2:ctrl+c中断进程操作一样
[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)