Shell命令
分内部命令(shell 进程一部分)和外部命令(文件的形式出现)
外部命令exp:grep,more,cat,mkdir,rmdir,ls,sort,ftp,telnet,lp,ps
Linux进程通过系统调用fork创建紫禁城,子进程执行exec,用命令对应可执行文件覆盖自身。
子shell默认继承父shell类型,但可在shell脚本文件首行指定子shell类型(#! shell addr)。
注:在命令行的shell下启用新的类型的shell视为创建子shell,此时用ps可以查看到父shell和子shell的进程。
ps中显示的同属于一个用户的进程,具有最小PID的为会话组长进程,该会话中创建的其他进程均为其子孙。,同一会话中所以有进程都有相同的SID(session ID)
ps xao pid,ppid,pgid,sid,comm
可用于查看进程的pid,ppid,pgid,sid和命令名
也可使用ps a(wsl上ps -a与其效果不同)查看进程pid,终端名,状态,持续时间和命令名,其中会话组长进程会在前加-,如-bash
标示 | 意义 |
---|---|
USER | 行程拥有者 |
PID | 进程的ID |
%CPU | 占用的 CPU 使用率 |
%MEM | 占用的记忆体使用率 |
VSZ | 占用的虚拟记忆体大小 |
RSS | 占用的记忆体大小 |
TTY | 终端的次要装置号码 (minor device number of tty),与终端无关显示?,pts/0表示由网络连接主机进程 |
STAT | 该行程的状态 |
START | 行程开始时间 |
TIME | 执行的时间 |
COMMAND | 所执行的指令 |
ps aux可显示上述信息
STAT | 描述 |
---|---|
D | 无法中断的休眠状态 (通常 IO 的进程) |
R | 正在执行中 |
S | 静止状态 |
T | 暂停执行 |
Z | 不存在但暂时无法消除(僵死) |
W | 没有足够的记忆体分页可分配(没有驻留在页面,完全交换到磁盘) |
< | 高优先序的行程 |
N | 低优先序的行程 |
L | 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O) |
ps-r 显示所有可运行,ps-j 显示PID,PGID,SID,TTY,TIME,CMD
ps -e显示系统中所有进程,ps f 可显示进程层次关系(wsl中和-f不同),同ps axf | more,pstree 可按树显示进程之间的父子关系。
-N,否定之前的命令选项效果
ps l,还有NI(Nice值,计算优先权参数,Nice值大优先权低),VSZ(虚拟大小,代码+数据+栈),RSS(驻留集大小),WCHAN(等待管道,运行/就绪进程为空,等待/休眠为等待事件)等信息
top:监视cpu,为交互式命令,
后台执行
/dev/null,Linux黑洞,进入后永不复出
后台执行时,在前台命令基础上+&,如 find [addr] -name [filename] &
此时shell返回作业号和进程PID,作业(不运行于前台的进程,只能在关联的终端上访问)
后台进程转前台:fg [%jobid],不带参数为将当前作业转至前台,也可以用可唯一标识作业的字符串作为参数(不一定为全名),字符串有空格时需用双引号将两端引起来
挂起进程:ctrl+z,会显示作业号
前台/挂起进程转后台:bg [%jobid-list],无参数时默认为当前进程
jobs中显示挂起和后台作业,+表示当前进程,-是以前进程,-l会将pid也显示
suspend命令:挂起当前shell
daemon:守护进程,运行在后台的进程
进程终止
内部信号/陷阱:内部事件产生信号
Ctrl+c:外部信号,软中断
kill [signal] proc-list:
1 挂断(退出系统,或用调制解调器使用系统时挂断电话)
2 中断(Ctrl+C)
3 退出(Ctrl+\)
9 强制终止
15 软信号(默认信号号码)
进程号0指代当前登录期间创建的进程,从而退出系统
也可用%jobid终止作业
在Bourne 和C shell下,若不想进程因系统退出时发送的挂断信号1而终止,可使用nohup command [args],后面也可像之前一样接命令组
有些进程在父进程(如shell)被终止时可能会被祖先进程init接收