Можно ли изменить родительский процесс процесса? Если да, то как?
Например,
как
screen
удается прикрепитьscreen
сеанс и процессы, выполняющиеся в нем, к различным процессам оболочки? Есть ли смена родительского процесса?Кажется, я слышал о других способах изменения процесса оболочки, в которых работает программа, но я не помню. Есть также смена родительского процесса программы?
Я думал,
disown
что процесс меняет родительский процесс процесса, просто потому, что названиеdisown
подразумевает это. Но я обнаружил, что это не так.Клиент Emacs может подключиться к серверу Emacs на другой вкладке терминала. Есть ли смена родительского процесса?
getppid(2)
, системный вызов и системные вызовы обрабатываются ядром. Программа может быть сбита с толку, если выполнить этот вызов, сохранить значение и затем использовать это значение после того, как его происхождение изменилось. Здесь есть шанс состояния гонки.
disown
просто удаляет данный дочерний элемент из внутреннего списка дочерних процессов оболочки. PPID ребенка остается тем из раковины. Оболочка забыла, что когда-либо начинала этот ребенок, но ядро помнит.