
我想查看一個命令的進度,我知道該命令大約需要六個小時。我運行了一個更新腳本,卻忘記使用 -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 下運行的所有進程。現在,如果該進程啟動一個守護進程,那就更棘手了,但這應該足以讓您開始。