
Я хотел бы посмотреть ход выполнения команды, которая, как я знаю, займет около шести часов. Я запустил скрипт обновления и забыл использовать -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
команду, и процессы, использующие больше всего ЦП, отобразятся наверху. Если он работает, то, drush
вероятно, должен быть где-то наверху.
решение3
Обычно первое, что делает команда или скрипт, это считывает параметры, поэтому короткий ответ: нет. И даже если программа выполнила некоторую работу по настройке, а затем считывает параметры, вам придется взломать память запущенного процесса.
Итак, чтобы ответить на вопрос, запущен ли вообще процесс, из командной строки, предположим, что ваш идентификатор пользователя, который вы использовали для запуска процесса, c.hall
равен
ps -fu c.hall
Который выведет список всех процессов, запущенных под этим идентификатором пользователя. Теперь, если процесс запускает процесс-демон, это сложнее, но этого должно быть достаточно, чтобы начать.
решение4
Как указано вОтвет Марка Стюарта, в общем случае изменить параметры команды после ее запуска невозможно.
В некоторых случаях, однако, возможно определить ход выполнения процесса извне. Например, отправка dd
процессу USR1
сигнала заставляет его вывести свой ход выполнения и продолжить:
kill -USR1 $(pgrep dd)
Для процессов, которые читают или записывают файлы, вы можете использоватьprogress
(только в Linux) для отслеживания того, сколько данных прочитано или записано, и, возможно, получения представления об оставшемся времени — по крайней мере, вы увидите, выполняет ли процесс еще что-либо:
progress -m -c dd
будет контролировать dd
процесс.