AFAIK, нет прямого способа выдвинуть на первый план процесс, который был запущен и основан на другой оболочке. Однако есть несколько способов обойти это.
Лучший способ - использовать экран GNU. Начните сеанс экрана, запустите процесс, отсоединитесь от сеанса экрана, выйдите из системы, снова войдите в систему, снова подключитесь к сеансу экрана. Процесс все еще выполняется, и экран сохраняет все выходные данные в буферах окна. Вам даже не нужно фон это; Вы можете оставить его запущенным в одном окне и использовать другие для других задач.
Уродливый хакерский способ - отсоединить его от терминала перед выходом из системы. В bash это делает disown -h %[jobid]
; другие оболочки, такие как tcsh, делают это автоматически для фоновых процессов при выходе из оболочки. (Получите $[jobid]
, запустив команду jobs
.) Вы не можете подключиться к процессу напрямую, но если все, что вам нужно, это процесс stdout/stderr/stdin, вы можете использовать GDB для имитации присоединения. Это частичный практический совет из этого источника (первоначально включенный в другой ответ):
[...] с некоторыми грязными взломами, невозможно повторно открыть процесс 'stdout /stderr /stdin.
Таким образом, вы все еще можете создать пустое окно экрана (например, которое запускает сон).
А затем, например, используйте gdb для подключения к процессу, сделайте несколько вызовов close (0)
позвонить близко (1)
позвонить близко (2)
вызов открыт ("/dev /pts /xx", ...)
вызов дуплика (0)
вызов дуплика (0)
отрывать
Результат процесса будет показан на экране. Он не будет подключен к этому экранному терминалу, поэтому, например, [sic] убьет команду "сна", а не процесс, но этого может быть достаточно для OP.
Есть несколько способов заставить bash делать автоматическое отречение, но они включают шоптс или nohup или другие трюки bash, чтобы избежать автоматического SIGHUP. bash не так грациозен, как tcsh в этой области, и вы должны заранее знать, что вам понадобится это для настройки опции. Перед запуском немного легче запомнить отключение на фоновой работе.