GNU/Linux >> Belajar Linux >  >> Linux

Secara terprogram dapatkan induk pid dari proses lain?

atau dari shell unix Anda dapat mencoba ps -p <child_pid> -o ppid=


Saya terlambat 7 tahun ke pesta tetapi bagi siapa saja yang mungkin menemukan pertanyaan ini, inilah solusi alternatif di OS X. Jawaban lain yang diposting di sini benar dan sysctl() akan melakukan tugasnya, tetapi Anda juga dapat menggunakan proc_pidinfo untuk mendapatkan banyak informasi berguna tentang suatu proses.

#include <libproc.h>

int getppid(const pid_t pid)
{
    proc_bsdinfo info;
    proc_pidinfo(pid, PROC_PIDTBSDINFO, 0, &info, sizeof(info));
    return info.pbi_ppid;
}

Jelas, pemeriksaan kesalahan tambahan diperlukan.


Saya pikir hal yang paling sederhana adalah membuka "/proc" dan mem-parsing isinya.

Anda akan menemukan ppid sebagai parameter ke-4 dari /proc/pid/stat

Di C, libproc memiliki get_proc_stats fungsi untuk mem-parsing file itu:lihat Diberi PID anak, bagaimana Anda bisa mendapatkan PID induk sebagai contoh.


Anda dapat melihat sysctl() panggilan sistem dan tautan ini.


Linux
  1. Mengapa Proses Pgid Anak Bukan Pid Orang Tua?

  2. Proses anak menerima SIGINT orang tua

  3. Mendeteksi kematian proses induk

  1. Bagaimana cara mendapatkan ID proses untuk mematikan proses nohup?

  2. Cara mendapatkan PID dari proses anak bercabang di skrip Shell

  3. Bagaimana cara mendapatkan PID dengan nama proses?

  1. Proses Induk Baru Ketika Proses Induk Meninggal?

  2. Proses Yang Memiliki Pid 0?

  3. Bagaimana cara mendapatkan pid dari suatu proses dan mengaktifkan kill -9 di skrip Shell?