Управление процессами в 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

Боюсь, что нет. но в следующий раз - используйте экран. Google для учебников или начать здесь.

Вы можете увидеть результат, посмотрев в /proc/(pid of your dd/fd/1 или же /proc/(pid)/fd/2, Следите за этим, затем ударьте по нему USR1 и посмотрите, что вы получите.

Другие вопросы по тегам