执行命令后如何应用 -v ?

执行命令后如何应用 -v ?

我想查看一个命令的进度,我知道该命令大约需要六个小时。我运行了一个更新脚本,却忘记使用 -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进程。

相关内容