linux 之程序管理

时间:2023-12-17 13:11:14
一个程序的父进程可以用PPID来判断
命令ps -l 可以用来观察程序相关的输出信息
被关闭的程序又产生:crontab或者父进程产生的
我们将常驻在系统中的程序称为:服务(daemon)
负责系统本身所需的服务:crond,atd
负责网络连线的服务:Apache,named,postfix,vsftpd..等,这些服务会启动一个端口负责网络监听,提供外部用户端的连线要求
linux中,预设了六个文字界面登入视图,一个图形界面,可以使用Alt+F1.../F7进行切换
ps -aux查看所有进程
cp file1 file2 & 将file1复制为file2,且放置于背景中执行
工作管理(job control)是用在自己的bash环境下的进行的
前景:可以控制与下指令的环境
背景:可以自行运作,不能通过ctrl+c终止,可使用bg/fg呼叫该工作
直接将指令丢到背景中执行 "&",可以通过资料流重定向来防止背景进程的输出对前景进程的影响
将‘目前’工作丢到背景中‘暂停’ crtl+z
观察目前的背景工作状态:jobs [-lrs]
选项与参数:
-l  处理列出job mumber与指令串之外,通过列出pid的号码
-r  仅列出正在背景运行(run)的工作
-s  仅列出正在背景中暂停(stop)的工作
输出列中的+号代表最后被放入到后台的工作,如果输入fg命令,它会拿到前景进行处理
          -号代表倒数第二个放置到背景的工作
把背景进程拿到前景处理:fg %jobnumber
让在背景暂停的任务运行:bg %jobnumber
管理背景进程: kill -signal %jobnumber
-l:L的小写,列出目前kill能够使用的讯号有哪些
signal:代表能给予后面的工作什么样的指示,用man 7 signal可知:
-1:重新读取参数,类似reload
-2:代表由键盘输入,ctrl+c一样的动作
-9:立刻强制删除一个工作
-15:以正常的程序方式终止一项工作
kill后面接的数字预设是PID,如果要管理bash的工作,要加上%数字了
选项与参数: %jobnumber:jobnumber为工作号码(数字),%号可有可无
刚刚说的背景进程依旧与终端机有关,如果离线了,将会被终止掉
可以使用at将工作放置到系统背景,而与终端机无关
nohup可以在离线时,让工作继续进行
nohup [指令与参数]  在终端机前景中工作
nohup [指令与参数]  & 在终端机背景中工作
将某个时间点的程序运作情况取下来:ps
参数与选项:
-A:所有的process均显示出来,与-e具有相同的效果
-a:不与terminal有关的所有process
-u:有效使用者相关的process
x :通常与a一起使用,可列出交完整资讯
输出格式设置:
l:较长,较详细的将该PID得资讯列出
j:工作的格式(jobs format)
-f:做一个更完整的输出
仅观察自己bash相关程序:ps -l
F:代表程序的权限,常见的号码有:4,表示此程序的权限为root
                                1,表示此子程序仅进行复制(fork)而没有实际执行(exec)
S:代表这个程序的状态,主要状态有:R,Running,运行中
                                  S,Sleep,睡眠状态
                                  D,不可被唤醒的睡眠状态,通常这支程式在等待I/O的情况
                                  T,stop,停止状态,可能是在工作控制(背景暂停)或除错(traced)状态
                                  Z,Zombie,僵尸状态,程序已经停止但无法被移除记忆体
UID:此程序被该UID所拥有
PID:程序的PID号码
PPID:此程序的父程序PID号码
C:代表CPU使用率,单位为百分比
PRI/NI:Priority/Nice的缩写,代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被执行
ADDR/SZ/WCHAN:ADDR是kernel function,指出该程序在记忆体的那个部分,如果是running,会显示-
              SZ代表此程序用掉多少记忆体
              WCHAN表示程序是否在运行中,如果是running则显示为-
TTY:登入者的终端位置,若为远端登入则使用动态终端界面pts/n
TIME:使用掉的cpu时间,而不是系统时间
CMD:造成此程序的指令
动态观察程序的变化:top [-d 数字] |top [-bnp]
-d:后面直接接秒数,设置显示的更新描述,预设是5秒
-b:以批次的方式执行top,通常会搭配资料重导向将批次的结果输出为档案
-n:与-b搭配,需要进行几次top的输出
-p:指定某些pid来进行监视
在top执行过程中可以使用的按键指令:
?:显示在top当中可以输入的按键指令
P:以CPU的使用资源排序显示
M:以Memory的使用资源排序显示
N:以PID来排序
T:由该process使用的cpu时间累积(TIME+)排序
k:给予某个PID一个讯号signal
r:给予某个PID重新制订一个nice值
q:离开top软体的按键
top默认使用CPU的使用率作为排序的重点
我们自己的bash PID可由$$变量取得,echo $$
pstree [-A|U][-up]
-A:各程序树之间的连接以ASCII字元来连接
-U:各程序树之间的连接以万元码的字元来连接,在某些终端界面下可能会有错误
-p:列出每个proces的PID
-u:列出每个process所属账号名称

通过给程序一个讯号(signal)告诉程序你想要她做什么

kill -signal PID
killall -signal 指令名称
killall [-iIe] [command name]
-i:interactive的意思,互动式的,若要删除时,会提示字元给使用者
-e:exact,表示后面接的command name要一致,但整个完整的指令不能超过15个字元
-I:指令名称(可能含参数)忽略大小写

通过档案(或档案系统)找出正在使用该档案的程序:fuser
fuser [-umv] [-k[i][-signal]] file/dir
-u:除了程序的PID之外,同时列出该程序的拥有者
-m:后面接的那个档名会主动地上提到该档案系统的最顶层,对umount不成功很有效
-v:可以列出每个档案与程序还有指令的完整相关性
-k:找出使用该档案/目录的PID,并试图以SIGKILL这个讯号给予该PID
-i:必须与-k配置,在删除PID前先询问使用者意愿
-signal:如-1,-15等,默认是SIGKILL (-9)

查出某个程序开启或者使用的档案与装置:lsof [-aUu][+d]
-a:多项资料需要‘同时成立’才显示结果
-U:仅列出Unix like系统的socket档案类型
-u:后面接username,列出该使用者相关程序所开启的档案
+d:后面接目录,亦即找出某个目录底下已经被开启的档案
找出某个正在执行的程式的PID:pidof [-sx] program_name
-s:仅列出一个PID而不是所有的PID
-x:同时列出该grogram name可能的PPID那个程序的PID