Apa yang dimaksud dengan pemimpin sesi, seperti ps -d
yang memilih semua proses kecuali pemimpin sesi?
Di Linux, setiap proses memiliki beberapa ID yang terkait dengannya, termasuk:
ID Proses (PID)
Ini adalah nomor arbitrer yang mengidentifikasi proses. Setiap proses memiliki ID unik, tetapi setelah proses keluar dan proses induk mengambil status keluar, ID proses dibebaskan untuk digunakan kembali oleh proses baru.
ID Proses Induk (PPID)
Ini hanya PID dari proses yang memulai proses tersebut.
ID Grup Proses (PGID)
Ini hanya PID dari pemimpin grup proses. Jika PID == PGID, maka proses ini adalah pemimpin grup proses.
ID Sesi (SID)
Ini hanya PID dari pemimpin sesi. Jika PID == SID, maka proses ini adalah pemimpin sesi.
Sesi dan kelompok proses hanyalah cara untuk memperlakukan sejumlah proses terkait sebagai satu unit. Semua anggota grup proses selalu menjadi bagian dari sesi yang sama, tetapi sesi mungkin memiliki beberapa grup proses.
Biasanya, shell akan menjadi pemimpin sesi, dan setiap pipa yang dieksekusi oleh shell itu akan menjadi grup proses. Ini untuk memudahkan membunuh anak-anak dari kerang ketika keluar. (Lihat pintu keluar (3) untuk detail berdarah.)
Saya tidak berpikir ada istilah khusus untuk anggota sesi atau kelompok proses yang bukan pemimpin.
ps xao pid,ppid,pgid,sid,comm
untuk melihat ID ini.Pemimpin sesi adalah proses di mana id sesi == proses id. Ini terdengar dibuat-buat, tetapi id sesi diwarisi oleh proses anak. Beberapa operasi dalam UNIX / Linux beroperasi pada sesi proses, misalnya, meniadakan id proses ketika mengirim ke panggilan sistem atau perintah kill. Penggunaan paling umum untuk ini adalah ketika keluar dari shell. OS akan mengirim
kill -HUP -$$
, yang akan mengirim sinyal SIGHUP (hangup) ke semua proses dengan id sesi yang sama dengan shell. Ketika Anda menolak suatu proses, id sesi proses diubah dari shell, sehingga tidak akan menanggapi sinyal hangup. Ini adalah salah satu bagian dari proses untuk menjadi proses daemon.Sebagian besar proses yang dipanggil dari window manager / environment grafis memiliki id sesi yang sama dengan salah satu program startup. Ini memungkinkan OS untuk melakukan
kill -HUP -$$
operasi yang sama pada semua program: seperti browser Anda, pemutar musik, libreoffice, klien IM, dll. Ini adalah proses yang bukan pemimpin sesi.sumber
Saya pikir saya tahu jawabannya, tapi saya menulis sebuah program C untuk mencari tahu.
Saya mengkompilasikannya dengan
cc -g -o sid sid.c
saya menjalankannya beberapa cara berbeda, untuk melihat apa yang terjadi:Saya agak terkejut dengan apa yang diberikan Linux (2.6.39) kembali. Saya juga menemukan halaman manual bagian 7, "kredensial".
Saran saya adalah melakukan
man 7 credentials
(atau yang setara jika tidak di Linux), dan baca bagian tentang grup proses dan sesi untuk melihat apakah Anda dapat memecahkannya.sumber
./sid
dannohup ./sid
, dan ketika Anda menjalankansetsid ./sid
, id sesi (SID) adalah merek baru dan sama dengan proses PID ... I ' Saya tidak yakin mengapa nohup mencegah garpu (atau tampaknya), tapi saya pikir saya punya ide umum ...