Wie kann ich -v anwenden, nachdem ich bereits einen Befehl ausgeführt habe?

Wie kann ich -v anwenden, nachdem ich bereits einen Befehl ausgeführt habe?

Ich möchte den Fortschritt eines Befehls verfolgen, von dem ich weiß, dass er etwa sechs Stunden dauern wird. Ich habe ein Update-Skript ausgeführt und vergessen, -v zu verwenden (oder was auch immer ich hätte tun sollen, um den Fortschritt zu „verfolgen“), sodass ich nicht wissen kann, wie weit der Vorgang fortgeschritten ist.

Falls dies zutrifft, war der Befehl, den ich verwendet habe:

drush cvupdb

Um eine CiviCRM-Installation zu aktualisieren, aber diese Frage bezieht sich nicht wirklich speziell auf CiviCRM. Die Antwort kann allgemein auf jeden bereits laufenden Prozess angewendet werden. Ich hätte diese Frage als Kommentar zu sehr ähnlichen Posts hinzugefügt, aber ich habe noch nicht genug Reputation, also musste ich ein neues Thema beginnen. Danke!

Antwort1

Wenn Sie den Quellcode des Programms haben, können Sie nachschauen, was die -vOption bewirkt. Oft setzt sie einfach eine Variable namens verbose, etwa so:

int verbose=0
while ((opt = getopt(argc, argv, "v")) != -1) {
        switch (opt) {
        case 'v':
            verbose= 1;
            break;

In einem solchen Fall und wenn das Programm Debuginformationen (Symboltabelle) enthält, ist es möglich, einen Debugger an den laufenden Prozess anzuhängen und die Variable entsprechend festzulegen:

gdb -p <pid>
n
n
...
set variable verbose=1
c

Antwort2

Kurze Antwort: Das ist grundsätzlich nicht möglich.

Um zu prüfen, ob bei Ihrem speziellen Problem etwas passiert, verwenden Sie top. Führen Sie einfach den topBefehl aus und die Prozesse, die die meiste CPU-Leistung verbrauchen, werden ganz oben angezeigt. Wenn es funktioniert, drushsollte es wahrscheinlich ganz oben stehen.

Antwort3

Im Allgemeinen liest ein Befehl oder Skript als Erstes die Parameter. Kurz gesagt: Nein. Und selbst wenn das Programm einige Einrichtungsarbeiten durchführen und dann die Parameter lesen würde, müssten Sie den Speicher eines laufenden Prozesses hacken.

Um die Frage zu beantworten, ob der Prozess überhaupt ausgeführt wird, gehen Sie von der Befehlszeile aus und gehen Sie davon aus, dass Ihre Benutzer-ID, mit der Sie den Prozess ausgeführt haben, c.halllautet

ps -fu c.hall

Dadurch werden alle Prozesse aufgelistet, die unter dieser Benutzer-ID ausgeführt werden. Wenn der Prozess einen Daemon-Prozess startet, ist es schwieriger, aber dies sollte für den Anfang ausreichen.

Antwort4

Wie inMark Stewarts Antwort, im Allgemeinen gibt es keine Möglichkeit, die Parameter eines Befehls nach dem Start zu ändern.

In manchen Fällen ist es jedoch möglich, den Fortschritt eines Prozesses extern zu bestimmen. Wenn Sie beispielsweise einem ddProzess ein USR1Signal senden, druckt dieser seinen Fortschritt aus und fährt fort:

kill -USR1 $(pgrep dd)

Für Prozesse, die Dateien lesen oder schreiben, können Sie verwendenprogress(nur unter Linux), um zu verfolgen, wie viel gelesen oder geschrieben wird, und vielleicht eine Vorstellung von der verbleibenden Zeit zu bekommen – zumindest sehen Sie, ob der Prozess noch etwas tut:

progress -m -c dd

würde einen ddProzess überwachen.

verwandte Informationen