Di mana PCB di Linux

10

Blok kontrol proses atau PCB , didefinisikan seperti ini di Wikipedia

Process Control Block (PCB, juga disebut Task Controlling Block, [1] Task Struct, atau Switchframe) adalah struktur data dalam kernel sistem operasi yang berisi informasi yang diperlukan untuk mengelola proses tertentu. PCB adalah "manifestasi dari suatu proses dalam sistem operasi

dan tugasnya adalah:

Process identification data
Processor state data
Process control data

Jadi di mana PCB dari suatu proses dapat ditemukan?

Mohammad Reza Rezwani
sumber
Lihat juga blok kontrol proses di Linux pada Stack Overflow.

Jawaban:

15

Dalam kernel Linux, setiap proses diwakili oleh task_structdalam daftar yang terhubung ganda, yang init_taskutamanya adalah (pid 0, bukan pid 1). Ini umumnya dikenal sebagai tabel proses .

Dalam mode pengguna, tabel proses terlihat oleh pengguna normal di bawah /proc. Mengambil judul untuk pertanyaan Anda:

  • Data identifikasi proses adalah ID proses (yang ada di jalur /proc/<process-id>/...), baris perintah ( cmd), dan mungkin atribut lainnya tergantung pada definisi Anda tentang 'identifikasi'.

  • Data status proses mencakup data penjadwalan ( sched, statdan schedstat), proses apa yang sedang menunggu ( wchan), lingkungannya ( environ) dll.

  • Data kontrol proses dapat dikatakan kredensial ( uid_map) dan batas sumber daya ( limits).

Jadi itu semua tergantung bagaimana Anda mendefinisikan istilah Anda ... tetapi secara umum, semua data tentang suatu proses dapat ditemukan di /proc.

Flup
sumber
"yang kepalanya init_task(pid 0, bukan pid 1)" Tidak ada yang namanya init_task. Itu init, dan pidnya adalah 1, bukan 0 (dikonfirmasi melalui pidof init).
AleksandrH
1
@AlexandrH init_task adalah struktur kernel dan bukan proses. Ini menunjuk ke tugas idle yang secara internal diwakili oleh pid 0. init_task dan init adalah hal yang sama sekali berbeda.
Flup
Namun pidhanya untuk proses ...
AleksandrH
1
@AleksandrH Baca init / init_task.c di pohon sumber kernel ( github.com/torvalds/linux/blob/master/init/init_task.c ).
Flup