如何在不受任何其他进程中断的情况下执行shell脚本中的一系列命令?
答案 0 :(得分:0)
你的意思是,没有被抢先一步?没门。内核调度程序可以随意选择要执行的任务。
但是,在Linux上,您可以设置“实时”优先级(即SCHED_FIFO或SCHED_RR),以确保脚本不会被中断以执行优先级较低的任务。
答案 1 :(得分:0)
如果您正在询问如何使shell进程忽略中断或其他信号,则答案是通过trap
命令。
trap "" 2
或:
trap "" INT
要取消该行为,请不要在字符串中列出任何内容:
trap 2
trap INT
如果需要删除中断(及相关信号)上的临时文件,可以使用以下内容:
tmp=$(mktemp ${TMPDIR:-/tmp}/name.XXXXXX)
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15 # EXIT HUP INT QUIT PIPE TERM
...do operations using temporary files...
rm -f $tmp
trap 0 # Cancel the exit trap
显示的信号集非常全面,涵盖了大多数正常事件。如果你收到了SIGKILL(kill -9
),那么临时就会被遗忘 - 你无能为力。 mktemp
命令安全地创建文件(参见Why do we need mktemp
?),但实际上在创建文件和设置陷阱以使脚本中断并留下临时文件之间留下了一个小小的机会窗口躺在那里。