Управление процессами в Linux
Я запустил длительный фоновый процесс (dd
с /dev/urandom
) в моей консоли SSH. Позже мне пришлось отключиться. Когда я снова вошел в систему (на этот раз напрямую, без ssh), процесс все еще продолжал выполняться.
Я не уверен, что случилось - я не использовал disown
, Когда я вошел позже, процесс не был указан в top
сначала, но через некоторое время, как я и ожидал, восстановился высокий процент загрузки процессора. Итак, я предполагаю dd
все еще работает.
Теперь я хотел бы увидеть прогресс. я использую kill -USR1 <pid>
но ничего не печатается. Есть ли способ получить выход снова?
4 ответа
Перенаправление всех выходных данных (stdout, stdin, stderr) может разъединить дочерний процесс с родительским.
Вы можете попробовать подключиться к процессу с помощью gdb, набрать 'c' для продолжения и посмотреть эту консоль, пока вы подключаете ее к другому.
gdb / bin / dd pid
Благодаря ответу kmarsh и этим темам я смог перенаправить потерянный вывод (stderr) в файл:
gdb /bin/dd 2616
(gdb) p creat("/root/dd.stderr",0600)
[Switching to Thread 0x7f651ece56e0 (LWP 2616)]
$1 = 3
(gdb) p dup2(3,2)
$2 = 2
(gdb) p close(3)
$3 = 0
(gdb) q
После запуска kill -USR1 2616
Я могу отследить мой новый файл:
631820341060 bytes (632 GB) copied, 81603.1 s, 7.7 MB/s
Вы можете увидеть результат, посмотрев в /proc/(pid of your dd/fd/1
или же /proc/(pid)/fd/2
, Следите за этим, затем ударьте по нему USR1 и посмотрите, что вы получите.