GNU/Linux >> Belajar Linux >  >> Linux

Cara mengatur ID proses di Linux untuk program tertentu

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:

  1. Buka /proc/sys/kernel/ns_last_pid dan dapatkan fd
  2. kumpulkan dengan LOCK_EX
  3. tulis PID-1
  4. 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.)


Linux
  1. Linux – Bagaimana Cara Mengatur Afinitas Prosesor Suatu Proses Di Linux?

  2. Bagaimana Cara Memulai Ulang (atau Mengatur Ulang) Proses yang Berjalan Di Linux?

  3. Bagaimana Cara Membunuh Proses yang Berjalan pada Port Tertentu di Linux?

  1. Cara menonaktifkan perintah khusus untuk pengguna tertentu di Linux

  2. Bagaimana cara mengatur afinitas CPU untuk proses dari C atau C++ di Linux?

  3. Pustaka Python untuk manajemen proses Linux

  1. Linux – Bagaimana Cara Berhenti Berbagi Jaringan Untuk Proses Saat Ini?

  2. Bagaimana agar hanya pengguna, pid dan perintah yang dijalankan untuk proses tertentu? (Ubuntu 11.10)

  3. Cara menemukan file .pid untuk proses tertentu