gpt4 book ai didi

linux - 如何从长时间运行的 linux 命令发送进程进度信息

转载 作者:太空狗 更新时间:2023-10-29 11:18:41 25 4
gpt4 key购买 nike

我打算编写一个 linux 命令来处理(使用自定义逻辑)一个非常大的文件。运行此命令后,将需要数小时才能完成任务。

提供 eta 输出的最佳方式是什么?

写一个 100 字节的进度状态文件的想法怎么样?在特定阶段,我可以将字节写入文件。假设在 40% 时我可以向文件写入 40 个字节。一旦文件大小达到 100 字节大小,则表示该过程已完成。因此,要监控进度,我们只需检查此文件的大小。

是否有处理此类进度信息的通用方法?我不想在我的程序中包含太多用于显示进度信息的逻辑。我正在寻找一个简单的解决方案。

有什么建议吗?

最佳答案

正常 方法是设置信号处理程序,如 dd会,然后您使用 kill 向进程发送 SIGUSR1 或类似的东西命令,它捕获信号并输出​​状态消息。尝试

man dd

因此,例如,在我的 iMac 上,dd使用 SIGINFO , 所以

# Move a whole load of nothing to nowhere in the background
dd if=/dev/zero of=/dev/null &
[1] 11232

# No output, till I want some a few seconds later

kill -SIGINFO 11232
12875835+0 records in
12875834+0 records out
6592427520 bytes transferred in 9.380158 secs (702805581 bytes/sec)



# No more output, till I want some a few more seconds later

kill -SIGINFO 11232
19163866+0 records in
19163865+0 records out
9811898880 bytes transferred in 14.015095 secs (700095068 bytes/sec)

信号处理程序非常容易设置,即使在 shell 脚本中也是如此。例如:

#!/bin/bash

trap "echo Progress report..." SIGINT
echo "My process id is $$"

while : ; do
sleep 10 # Do something - admittedly little :-)
done

关于linux - 如何从长时间运行的 linux 命令发送进程进度信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com