19.Linux Shell任务控制

本文详细介绍了LinuxShell中的任务控制技术,包括信号的发送与捕获、在后台运行脚本的方法(使用&和nohub)、作业控制(如jobs命令和优先级调整)、以及定时任务的实现(at命令和cron表)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


Linux Shell任务控制

通常情况下运行脚本的方式就是以实时模式在命令行界面上直接运行,除此之外还有很多其他的运行脚本的方式,如后台运行,定时运行等等。除运行方式外,还可以对脚本程序的运行进行控制,包括向脚本发送信号、修改脚本的优先级以及在脚本运行时从暂停切换到运行模式。

1)信号

Linux利用信号与运行在系统中的进程进行通信,可以通过对脚本进行编程,使其在收到特定信号时执行特定命令。

信号 描述
1 SIGHUP 挂起进程
2 SIGINT 终止进程
3 SIGQUIT 停止进程
9 SIGKILL 无条件终止进程
15 SIGTERM 尽可能终止进程
17 SIGSTOP 无条件停止进程,但不是终止进程
18 SIGTSTP 停止或暂停进程,但不终止进程
19 SIGCONT 继续运行停止的进程

默认情况下,交互式shell终端本身的进程会忽略收到的任何 SIGQUIT (3)SIGTERM (5) 信号,因此其不会被意外终止。

如果bash shell收到了 SIGHUP 信号,比如当要离开一个交互式shell时,它就会退出。但在退出之前,它会将 SIGHUP 信号传给所有由该shell所启动的进程。

通过键盘生成信号

Ctrl+C组合键会生成 SIGINT 信号,并将其发送给当前在shell中运行的所有进程

Ctrl+Z组合键会生成一个 SIGTSTP 信号,停止shell中运行的任何进程。这样可以在进程运行期间暂停进程,而无需终止它。这样可以在不终止进程的情况下使用户深入脚本内部一窥究竟。

停止进程会让程序继续保留在内存中,并能从上次停止的位置继续运行。

要想启动停止的进程可以使用fgbg在前台和后台启动

$ sleep 100
# ^Z
# [1]+  已停止               sleep 100

方括号中的数字是shell分配的作业号 (job number)

可以用 ps 命令来查看已停止的作业。

$ ps -l
# F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
# 0 T  1001  116014  113239  0  80   0 -  2791 do_sig pts/0    00:00:00 sleep

S 列中(进程状态), ps 命令将已停止作业的状态为显示为 T 。这说明命令要么被跟踪,要么被停止了。

在有已停止作业存在的情况下退出shell会终止已停止作业。

trap 命令捕获信号

trap命令允许用户来指定shell脚本要监视并从shell中拦截的Linux信号。当脚本收到了 trap 命令中列出的信号,会执行用户指定的操作。

trap命令的格式:

trap commands signals

示例,

#!/bin/bash

trap "echo 'Ctrl-C Pressed'" SIGINT

echo This is a test

c=1
while [ $c -le 5 ]
do
    echo "Loop #$c"
    sleep 1
    c=$[ $c + 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值