Mám spuštěný program na SSH shellu. Chci jej pozastavit a mít možnost zrušit pozastavení jeho provádění, až se vrátím.
Jedním ze způsobů, jak to udělat, bylo převést jeho vlastnictví na shell obrazovky, a tak jej tam nechat běžet.
Existuje jiný způsob, jak postupovat?
Přijatá odpověď:
„Vlastnictví“ programu můžete z prostředí shellu zrušit pomocí disown
vestavěný:
# press Ctrl+Z to suspend the program
bg
disown
To však pouze říká shellu, aby neodesílal SIGHUP
signál do programu, když shell opustí. Program si zachová veškeré spojení, které má s terminálem, obvykle jako standardní vstupní, výstupní a chybové proudy. Neexistuje způsob, jak je znovu připojit k jinému terminálu. (Screen funguje tak, že emuluje terminál pro každé okno, takže programy jsou připojeny k oknu obrazovky.)
Je možné znovu připojit deskriptory souboru k jinému souboru připojením programu v debuggeru (tj. pomocí ptrace
) a zavolání open
, dup
a close
. Existuje několik nástrojů, které to umožňují; je to složitý proces a někdy místo toho proces zhroutí. Možnosti zahrnují (odkazy shromážděné z odpovědí na Jak mohu zrušit běžící proces a přiřadit jej k novému prostředí obrazovky? a Mohu nohup/obrazovat již spuštěný proces?):
- chytit (a ambicióznější kryopid)
- neercs
- přesměrování
- reptyr
- retty