1.进程ID和作业编号
[1] 3318
2.作业控制
一旦作业在后台执行,你能够让它一直执行,或把它放到前台,或向其发送信号。
2.1.前台和后台
[1] 3481
yanwenjie@ywjpc:~/ctest$ ./b &
[2] 3482
yanwenjie@ywjpc:~/ctest$ ./c &
[3] 3483
yanwenjie@ywjpc:~/ctest$ jobs
[1] Running ./a &
[2]- Running ./b &
[3]+ Running ./c &
$ jobs -p
3481
3482
3483
2.2.挂起一个作业
^Z
[1]+ Stopped ./a
业名或者编号的fg。
yanwenjie@ywjpc:~/ctest$ jobs
[1] Stopped ./a
[2]- Stopped ./b
[3]+ Stopped ./c
yanwenjie@ywjpc:~/ctest$ fg %1
./a
假设键入ctrl-z后跟bg。就会把该作业放到后台执行。
yanwenjie@ywjpc:~/ctest$ jobs
[1] Stopped ./a
[2]- Stopped ./b
[3]+ Stopped ./c
yanwenjie@ywjpc:~/ctest$ bg %2
[2]- ./b &
yanwenjie@ywjpc:~/ctest$ jobs
[1]- Stopped ./a
[2] Running ./b &
[3]+ Stopped ./c
3.信号
3.1.控制键信号
3.2.kill
# ./a &
[1] 2680
# kill %1
[1]+ Terminated ./a
假设没有看到该消息,TERM信号中断作业失败。下一步再试试QUIT:
kill -QUIT %1
假设工作正常会看到:
[1]+ Quit (core dumped) ./a
假设QUIT也不正常执行,自后一种方式是使用KILL:
# kill -KILL %1
[1]+ Killed ./a
3.3.trap
while true; do
sleep 60
done
^Cyou hit ctrl-c
^Cyou hit ctrl-c
3.4.进程ID变量
while true; do
sleep 10
done
[1] 3258
root@ywjpc:/home/yanwenjie/bashtest# 3258
3.5.重置陷阱信号
它会将收到信号时的行为重置为默认欣慰,一般是进程的终止。
trap "echo 'ctrl c is received'" INT
i=5
while [ $i -gt 0 ]; do
sleep 5
i=$((i-1))
done
trap - INT
i=5
while [ $i -gt 0 ]; do
sleep 5
i=$((i-1))
done
^Cctrl c is received
^Cctrl c is received
^Cctrl c is received
^Cctrl c is received
^Cctrl c is received
^C
4.协同程序
alice &
假设当脚本完毕时,alice仍然执行,那么
5.子shell
5.1.子shell继承
- 当前文件夹
- 环境变量
- 标准输入,标准输出和标准错误,以及其他不论什么打开的文件描写叙述符。
- 被忽略的信号。
- shell变量
- 没有被忽略的信号处理
5.2.嵌套子shell
这通常不如一个命令块效率高。子shell和命令块在功能上的区别非常少。它们之间的主要区别
首先,嵌套子shell内的代码服从上述子shell继承规则,除此