コマンドを実行した後に-vを適用する方法は?

コマンドを実行した後に-vを適用する方法は?

6時間ほどかかるとわかっている命令の進行状況を確認したいと思います。更新スクリプトを実行し、-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

一般的に、コマンドやスクリプトが最初に行うことは引数を読むことですので、簡単に答えると「いいえ」です。プログラムがいくつかの設定タスクを実行してからパラメータを読み取る場合でも、実行中のプロセスのメモリをハックする必要があります。

したがって、プロセスがコマンドラインで実行されているかどうかに関する質問に答えるために、プロセスを実行するために使用するユーザーIDが次のとおりであるとしますc.hall

ps -fu c.hall

これにより、そのユーザーIDで実行されているすべてのプロセスが一覧表示されます。これで、プロセスがデーモンを起動すると、よりトリッキーですが、起動するのに十分です。

答え4

に示すようにマークスチュアートの回答、一般的に言えば、コマンドを開始した後にコマンドのパラメータを変更することはできません。

しかし、場合によっては、プロセスの進捗状況を外部から判断することができます。たとえば、プロセスにシグナルをdd送信するとUSR1、進捗状況が印刷され、続行されます。

kill -USR1 $(pgrep dd)

ファイルを読み書きするプロセスには、次のものを使用できます。progress(Linuxのみ)どのくらいの読み書きを追跡し、残りの時間がどれくらいになるかを確認します。少なくとも、プロセスがまだ作業を行っていることを確認できます。

progress -m -c dd

プロセスがdd監視されます。

関連情報