shell进程控制
终端进程控制
- ctrl+c 发送信号SIGNIN终止进程
- ctrl+\ 发送信号SIGQUIT终止进程
- ctrl+z 发送信号SIGSTOP暂停进程
- jobs 可以查看所有进程
- bg %num 根据jobs查看到的num在后台继续暂停的进程
- fg %num 根据jobs查看到的num在前台继续暂停的进程
- man signal 可以查看信号代号与功能
- kill 信号 %num 向jobs查看到的num信号发送指定指令,或者不使用%num而使用进程号
- nohup 可以让信号免受HANG UP信号的影响而终止
双进程同时进行
格式如下:
{ command1; }&
{ command2; }&
wait
command1与command2会同时运行,两个进程都运行结束才会继续运行wait后面的内容。
设置守护进程
使用场景:需要用command2监控command1的状态,并且command1结束后要自动结束掉command2
思路:command1开始结束进行创建与删除文件,command2以文件存在作为循环条件。
#!/bin/bash
LOCK=.lock_test
touch $LOCK
{ ./test1.sh > xzh.txt;rm $LOCK; } &
./test2.sh $LOCK &
wait
echo "ALL finished"
test1.sh为主进程,test2.sh为守护进程。test2.sh代码如下:
#!/bin/bash
while [ -e $1 ]
do
done
在循环中加入判断等进行监控。
进程锁
flock -x $lock_name -c "command1"
使用进程锁时,如果\(lock_name被占用,command1会等待直到\)lock_name没人占用。
如果$lock_name没被占用,command1会执行并占用锁,下一个flock -x $lock_name -c "command2" 进入时会等待直到command1结束。
适用于多个进程不能同时运行,只能先后执行的情况。
离线线程
如果希望程序在终端关闭后仍然运行,终端最好正常退出。(适用于远程连接服务器,本机关机)
可以使用nohup command1 > a.txt &

浙公网安备 33010602011771号