Faktycznie, istnieje sposób, aby to zrobić. Ponieważ jądro 3.3 z ustawieniem CONFIG_CHECKPOINT_RESTORE (które jest ustawione w większości dystrybucji), istnieje/proc/sys/kernel/ns_last_pid, który zawiera ostatni pid generowany przez jądro. Tak więc, jeśli chcesz ustawić PID dla rozwidloną programu, należy wykonać następujące czynności:
- Otwórz/proc/sys/kernel/ns_last_pid i dostać fd
- stado go LOCK_EX
- zapisu PId- 1
- widelec
Voilà! Dziecko będzie miało PID, którego pragniesz. Nie zapomnij również odblokować (flock z LOCK_UN) i zamknąć ns_last_pid.
Możesz sprawdzić kod C na moim blogu here.
Pachnie jak problem XY. Dlaczego potrzebujesz pid z wyprzedzeniem? –
Z tego, co wiem o Linuksie i UNICE'ach ogólnie, byłbym zaskoczony, gdybyś mógł to zrobić, ale istnieje wiele sposobów na ustalenie PID danego procesu, gdy jest on uruchomiony. Być może powinieneś wyjaśnić, co chcesz robić i przyjąć sugestie dotyczące alternatyw. – deStrangis
Krótka odpowiedź brzmi: nie. – devnull