我想查看一个命令的进度,我知道该命令大约需要六个小时。我运行了一个更新脚本,却忘记使用 -v (或者我应该做的任何事情来“观察”进度),所以我无法知道这个过程有多远。
如果适用,我使用的命令是:
drush cvupdb
升级 CiviCRM 安装,但这个问题并不真正适用于 CiviCRM。答案可以普遍适用于任何已经运行的进程。我会添加这个问题作为对非常相似的帖子的评论,但我还没有足够的声誉,所以我需要开始一个新的主题。谢谢!
答案1
如果您有该程序的源代码,您可以查看该-v
选项的作用。它通常只是设置一个名为 verbose 的变量,例如:
int verbose=0
while ((opt = getopt(argc, argv, "v")) != -1) {
switch (opt) {
case 'v':
verbose= 1;
break;
在这种情况下,如果程序包含调试信息(符号表),则可以将调试器附加到正在运行的进程并适当地设置变量:
gdb -p <pid>
n
n
...
set variable verbose=1
c
答案2
简短的回答:一般来说你不能这样做。
对于您的具体问题,要检查它是否正在执行某些操作,请使用top
.只需运行该top
命令,使用最多 CPU 的进程就会显示在顶部。如果它有效,drush
可能应该接近顶部。
答案3
一般来说,命令或脚本所做的第一件事就是读取参数,所以简短的回答是,不。即使程序做了一些设置工作然后读取参数,您也需要破解正在运行的进程的内存。
因此,为了从命令行回答该进程是否正在运行的问题,假设您用于运行该进程的用户 IDc.hall
是
ps -fu c.hall
这将列出该用户 ID 下运行的所有进程。现在,如果该进程启动一个守护进程,那就更棘手了,但这应该足以让您开始。
答案4
如中所示马克·斯图尔特的回答,一般来说,启动命令后无法更改命令的参数。
但在某些情况下,可以从外部确定流程的进度。例如,向dd
进程发送USR1
信号会导致其打印其进度并继续:
kill -USR1 $(pgrep dd)
对于读取或写入文件的进程,您可以使用progress
(仅在 Linux 上)跟踪它们的读取或写入量,也许还可以了解剩余时间 - 至少,您会看到该进程是否仍在执行任何操作:
progress -m -c dd
将监视一个dd
进程。