我想知道是否可以在磁盘空间不足时挂起/暂停 Bash 中的进程。例如,如果我正在工作的服务器上的可用磁盘空间低于 100 Gb 以暂停它而不是在达到 0 可用磁盘空间时使其崩溃。
我找不到任何与我类似的问题,但如果有请链接。我对信息学很陌生,因为我最近开始撰写基因组学论文,所以我什至不确定这是否可行。
干杯
大卫
答案 0 :(得分:0)
当然,为什么不 - 您可以“暂停”Linux 中的任何进程。在伪代码中,即使有一些状态变量:
#!/bin/bash
bash some_bash_process &
pid=$!
trap 'kill "$pid"' EXIT
paused=false
while process_still_running "$pid"; do
if free_disc_space_below 100G; then
if ! "$paused"; then
paused=true
kill -s SIGSTOP "$pid"
fi
else
if "$paused"; then
paused=false
kill -s SIGCONT "$pid"
fi
fi
sleep 1
done
研究 shell 中的后台运行进程、信号以及 SIGSTOP
和 SIGCONT
信号及其行为以获取更多信息。
答案 1 :(得分:0)
使用 df
定期检查磁盘使用情况。如果发现空间不足,请通过发送信号暂停进程。
processThatMightRunOutOfDiskSpace &
pid=$!
while
[ -d "/proc/$pid" ] &&
[ "$(df --output=avail / | tail -n1)" -gt 1048576 ]
do
sleep 5
done
kill -TSTP "$pid"
确保为 df
指定正确的文件系统。我在这里使用了 /
。但是,当您的进程将数据写入另一个文件系统(例如安装在 /home
上的单独文件系统)时,您必须改为指定该文件系统。
df
报告 1KB 块中的可用空间。 1048576
是 1024*1024,即填充一个 1GB 所需的 1KB 块数。
这里我们使用了信号 SIGTSTP,因为我假设您的进程是一个 bash 脚本。 SIGSTP 是当您点击 ctrlz 时发送到前台进程的信号 bash
。然而,这个信号可以被忽略。如果它不起作用,请改用 SIGSTOP (kill -STOP
)。
在这两种情况下,要继续停止的进程,请使用 kill -CONT "$pid"
。