Какой процесс породил, тот и будет родителем. Нельзя просто так взять и назначить родителем кого угодно(кроме случаев, когда родительский процесс умирает и дочернего забирает себе init).
Форк происходит от текущего запущенного процесса. Этот текущий и является родителем форкнувшегося.
Мне кажется, ты не совсем понимаешь, что тебе нужно. Объясни задачу подробнее.
Есть сервис системный сервис openvpn, который требует от пользователя логин, пароль, otp. Есть пользователь, который хранит эти данные в менеджере паролей pass. Есть systemd сервис, который при запуске ВПН идет к пользователю и получает всё что нужно. В кратце, запустится диалоговое окно программы pinentry, для ввода мастер ключа от хранилища паролей пользователя.
Есть ноутбук, на котором всё это крутится и у которого часто закрывается крышка, при этом работа ВПН прерывается. После открытия крышки соединение пытается восстановиться, все доходит до pinentry и… Его диалоговое окно надо куда то вывесить.
Я вывешиваю в терминал где крутится bash пользователя, где он успешно с этим bash и делит I/O, половина вводимого уходит в bash, половина pinentry. А надо, что бы оно форкнулось от bash и не делило с ним I/O. Как буд то в этом экземпляре bash запустили эту команду.
Ну на слаквари просто вписываешь в inittab запуск интересующей программы на нужной консоли и всё. :) Так у меня сейчас стартуют виртуалки без графики. До этого много всяких кривоватых программ.
Мне кажется ты уже создавал эту тему и я тебе там отвечал, что баш надо сделать kill -STOP на это время. В чём проблема то?
А то что ты хочешь сделать в этой теме - глупость. Даже если ты хакнешь ядро и перепишешь parent-pid, это никак на конкуренцию за чтение из терминала не повлияет.
Да, я помню и пользуюсь им. Просто хочется более изящного решения.
Неужели нельзя сказать, эй ты вон третий слева, форкнись с сохранением окружения и запусти вот это, а сам постой в сторонке.
Это наверно решило бы много проблем. На моем примере, мне не пришлось бы разбираться, почему pinentry из баша работает как надо, а при вызове из сервиса надо делать кульбиты в воздухе и понимать чего ей не хватает, а это strace с вдумчивым чтением, сравнением и всякими удовольствиями…
pinentry из баша работает так потому что баш знает что он только что кого-то запустил и штатно, в соответствии с логикой работы шелла, ждёт от него код возврата. К твоим странным идеям подмены ppid это никакого отношения не имеет.
а сам постой в сторонке.
Это и есть SIGSTOP. А форкать именно баш никакой нужды, как я уже написал, нет.
pinentry из баша работает так потому что баш знает что он только что кого-то запустил и штатно, в соответствии с логикой работы…
Ты тут неправ, pinentry так работает потому что наслудует от баша и х.з. ещё чего всю бороду переменных и т.п. Так вот что бы избежать такой порнографии в будущем, гораздо удобнее форкнуться от работающего процесса. О чем собственно и этот трэд.