Sebenarnya, ada cara untuk melakukan ini. Sejak kernel 3.3 dengan set CONFIG_CHECKPOINT_RESTORE (yang diatur di sebagian besar distro), ada /proc/sys/kernel/ns_last_pid yang berisi pid terakhir yang dihasilkan oleh kernel. Jadi, jika Anda ingin menyetel PID untuk program bercabang, Anda perlu melakukan tindakan berikut:
- Buka /proc/sys/kernel/ns_last_pid dan dapatkan fd
- kumpulkan dengan LOCK_EX
- tulis PID-1
- garpu
Voila! Anak akan memiliki PID yang Anda inginkan. Selain itu, jangan lupa untuk membuka (flock dengan LOCK_UN) dan menutup ns_last_pid.
Anda dapat checkout kode C di blog saya di sini.
Seperti yang sudah banyak disarankan, Anda tidak dapat menyetel langsung PID tetapi biasanya shell memiliki fasilitas untuk mengetahui ID proses bercabang mana yang terakhir.
Misalnya di bash Anda dapat makan siang yang dapat dieksekusi di latar belakang (menambahkan &
) dan temukan PID-nya di variabel $!
.Contoh:
$ lsof >/dev/null &
[1] 15458
$ echo $!
15458
Di CentOS7.2 Anda cukup melakukan hal berikut:
Katakanlah Anda ingin menjalankan perintah tidur dengan PID 1894.
sudo echo 1893 > /proc/sys/kernel/ns_last_pid; sleep 1000
(Namun, perlu diingat bahwa jika kebetulan proses lain dijalankan dalam waktu yang sangat singkat antara perintah gema dan tidur, Anda dapat memperoleh PID 1895+. Saya telah mengujinya ratusan kali dan tidak pernah terjadi kepada saya. Jika Anda ingin menjamin PID, Anda perlu mengunci file setelah Anda menulisnya, jalankan tidur, lalu buka kunci file seperti yang disarankan dalam jawaban Ruslan di atas.)