У меня длинный процесс dd запущенный в системе Debian с локальной консоли.

Я знаю, что могу отправить USER1 или CTRL+T на локальную консоль, но на данный момент я могу только следить за этим через ssh . Google, к сожалению, здесь не помог.

Есть ли простой способ контролировать его прогресс удаленно, не останавливая текущую задачу?

1 ответ1

0

Теперь, когда запущена длинная команда dd , уже слишком поздно перенаправлять вывод. Может быть, вы далеко от консоли и не можете использовать screen или создать FIFO для его stderr...

... но вы все равно можете использовать две сессии ssh и strace !

На первой сессии SSH вы можете написать

sudo strace -ewrite -p `pgrep ^dd`  2>&1 | grep -v "write(1,"

На втором вместо (прочитать предупреждение ниже примечание для сигнала использовать -SIGUSR1 или SIGINFO

kill -USR1 $(pgrep ^dd)

И прочитайте не очень хороший вывод с первого, подобного приведенному ниже

Process 26176 attached
--- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_USER, si_pid=29517, si_uid=0} ---
write(2, "329094980+0 records in\n329094979"..., 47) = 47
write(2, "168496629248 bytes (168 GB) copi"..., 34) = 34
write(2, ", 109.221 s, 1.5 GB/s\n", 22) = 22

Примечание. К сожалению (даже если сообщается по-другому), команда kill -USR1 $(pgrep ^dd) заставит запущенные процессы dd записывать данные в их исходный stderr. Для этого нужно было изменить исходный ответ (это можно увидеть в истории версий).
Предупреждение: Как сообщается в этом другом ответе, сигнал для отправки с kill вместо -USR1 может зависеть от дистрибутива Linux. Под OpenBSD -SIGINFO под Ubuntu SIGUSR1 . Внимательно проверьте это заранее, если не тот может прервать процесс!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .