程序管理
进程:在LINUX系统中,出发任何一个事件时,系统都会将它定义成一个进程,并且给予这个进程一个ID,称为PID。同时依据出发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置,从此这个PID就能在系统上面进行的操作,就与这个PID的权限有关了。
如何产生一个进程?
其实,“执行一个程序或者命令”,就可以触发一个事件而取得一个PID。系统应该是仅仅认识二进制文件的,那么当我们要让系统工作的时候,当然就是需要启动一个二进制文件,而这个二进制文件就是程序(program)。
下面将程序与进程进行总结:
程序(program):通常为二进制程序存放在存储媒介中(如硬盘、光盘、软盘、磁带等),以物理文件的形式存在;
进程(process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载到内存中,操作系统并给与这个内存内的单元一个标识符(PID),可以说,进程就是一个正在运行中的程序。
父进程和子进程
子进程是父进程“衍生出来”的进程。ps –l 可以看到有个选项PPID可以看到这个选项记录了父进程的PID。
Linux的多用户、多任务环境
多用户:Linux上面具有多个用户,每个用户有不同的权限,只有一个最高权限用户,那就是root。
脱机管理
程序在后台运行后,可以避免被ctrl+c中断,但是工作管理的后台依旧与终端机有关。如果你以远程连接方式连接,并且以&的方式放入后台后,当进程还未结束的时候,你脱机了,线程就不会继续进行了。
怎么解决这个问题,就是nohup。nohup并不支持bash内置的命令,因此你的命令必须是外部命令才行。
#!/bin/bash /bin/sleep 500s /bin/echo "I have slept 500 seconds!" |
nohup与终端是无关的了,因此最后的一个输出信息被输出到~/nohup.out。
进程管理
1、 进程的查看
静态用ps,动态查看用top,还可以用pstree查看进程树。
ps –l 仅仅查看自己bash程序的
ps aux 查看所有系统运行的程序。
僵尸进程:ps –l S项值为Z(Zombie),产生僵尸进程的原因有:系统不稳定比较容易,另外程序写的不好,用户操作习惯不良也会造成僵尸进程。当僵尸进程产生后,不应该只关闭僵尸进程,要找到进程的父进程,然后做好跟踪,不然的话可能一直产生。
事实上,僵尸进程已经无法控管,而是直接交给init这个程序负责,而init的程序是系统的第一个服务,他是所有程序的父进程,我们无法结束掉。所以,如果产生僵尸进程,而系统过一阵子还没有办法通过内核非经常性的特殊处理还将进程删除掉时,那你只好通过reboot的方式来将该进程抹去。