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 &

posted @ 2023-01-30 14:32  心比天高xzh  阅读(30)  评论(0)    收藏  举报