コマンドを実行した後で -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

簡単に答えると、一般的にはこれを行うことはできません。

特定の問題 の場合、何か動作しているかどうかを確認するには、 を使用しますtoptopコマンドを実行するだけで、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

関連情報