当linux执行命令时,它会将有关的权限`属性`程序代码与数据等加载到内存,然后加上进程标识符PID
1.针对一个shell,我们可以吧前台foreground丢到后台background执行用&
cp file1 file2 &
此时此进程会在后台执行,并把执行结果在完成时返回前台,我们就可以在一个shell执行其他命令了。我们可以用
jobs [lrs] 来查看工作情况. ctrl z 来将job丢到后台,并为暂停状态 fg %jobnum 来执行后台程序
常说的杀掉进程 kill -signal %jobnum ,比如%1代表工作号为1 的进程,这个进程为放到后台的进程。kill默认后边加的参数pid,所以要杀掉后台的进程需要加上%(我们加&的进程)
kill -l 可以查看可用的singnal,可以用 man 7 signal 命令去查看更详细的命令。
2. 脱机管理,ctrl c 是不能够将&后台运行进程停止。
当你想要你的程序在你注销一个用户后继续执行可以用
nohup 命令+参数 nohub不支持bash内置命令
此时,你执行的命令已经和你的shell 没有关系,每当我们关掉一个shell,我们会发现在那个shell执行的命令都会终止,而nohup的命令使你的程序和你的shell脱离独立运行。
3. 查看进程
a代表不与teminal(shell)有关的进程, A代表所有进程, u代表有效用户, l 详细信息, j工作格式, f完整的输出
ps -l
只列出当前登录的pid和他的信息,其中
F 代表进程的flag :4代表root,1代表此进程可以fork但不可以执行;
S (STAT)进程状态: R,running S ,sleep T ,stop Z,zombie(僵尸进程,由于故障存在于内存,但有删除不了,只能reboot) D,不可被唤醒的状态
ps aux
查看系统内所有的进程。ps aux|grep 用来查看特定进程
ps -lA 显示出所有内容 ps axjf 列出类似进程树 top -d 5 以5秒为间隔动态查看进程状态 pstree 进程树
4.进程操作
要想操作进程,只需要给进程一个signal就行了。man 7 signal 查看详情。
kill -signal PID
killall -signal processName
看到以上两个命令的区别了吧,kill 加的是id ,killall 加的是名字。
针对kill all -i 交互式删除 -e exact 一致和要删命令(进程)的名字 -I 忽略大小写
killall -i syslogd killall -9 httpd //强制删除所有以httpd启动的进程 killall -i -9 bash // 交互删除