1.1 进程列表
- 可以在一行,指定依次运行的一系列命令,如
pwd; ls
。但是这不是进程列表。 - 进程列表需要用括号包裹起来,如
(pwd; ls)
,进程列表是创建子shell进行运行。 $BASH_SUBSHELL
,返回0,则表示没有创建子shell。
1.2 后台模式
- 在命令的末尾加入
&
sleep 10 &
,结果是[2] 47073
,当括号内的2,表示有两个后台任务,47073
是进程ID。
- 原理
- Shell会使用
fork()
系统调用创建一个子进程,然后后台执行任务 - 后台运行不一定创建了子shell
- Shell会使用
- 查看后台作业
jobs
-l
查看更多信息。
- 将后台作业切换到前台
fg %作业号
- 把前台作业放到后台
ctrl + z
先暂停任务bg %作业号
- 杀死后台任务
kill %作业号
- 子shell和后台运行的区别
- 子shell会阻塞父进程,后台运行不会
- 子shell拥有自己的环境,后台运行共享Shell环境(除非明确在子shell中运行)。
- 子shell和后台运行都要创建子进程。
- 可以将进程列表放入后台
(sleep 2; pwd) &
1.3外部命令
- 外部命令就是bash shell之外的程序。当执行外部命令时,会创建出一个子进程。例如ps,使用
ps -f
可以看见ps这条命令同样创建了一个进程。 - 内建命令速度会快很多。
1.4 history命令
- 作用:跟踪使用过的命令
- 常用方式
history
- 然后
!数字
,就能够执行对应的命令
!!
执行刚刚执行的命令- 一个环境变量
HISTSIZE
,保存最多命令的数量 - 历史命令保存在
~/.bash_history
中,先存放在内存,当shell退出时,才被写入。history -a
强制写。
1.5 alias命令
- 作用:为常用的命令创建另一个名称。
alias -p
查看当前可用的别名alias p='pwd'
,创建别名- 一个别名仅在被定义的shell中才有效。