Baca kredensial(7), fork(2), execve(2). Panggilan sistem garpu adalah cara proses dibuat (hari ini, fork
sering diimplementasikan dengan clone(2) tetapi Anda dapat melihatnya sebagai detail implementasi). Panggilan sistem exec adalah cara program yang dapat dieksekusi dimulai. Ingatlah bahwa semuanya dilakukan dari beberapa proses dengan beberapa panggilan sistem (tercantum di syscalls(2)). Proses pertama (init atau systemd) telah dimulai secara ajaib oleh kernel saat boot. Proses lain telah dimulai dengan fork(2). Kernel Linux modern terkadang - tetapi jarang - secara ajaib memulai beberapa proses khusus (mis. /sbin/hotplug
) atau utas kernel (mis. kworker
, kswapd
....).
Jadi ya, setiap proses (dan setiap file) memiliki beberapa pemilik (secara teknis uid, angka non-negatif kecil) dan grup (gid). 0 uid adalah untuk root dan memiliki izin tambahan.
Baca juga tentang setuid (dan setreuid(2)...) Ini rumit.
apakah itu berarti pemilik lain tidak dapat menjalankan proses itu?
Sebuah proses sudah berjalan (tapi bisa saja menganggur atau menunggu), jadi tidak ada yang bisa menjalankannya lagi. Jangan bingung proses (sesuatu yang dinamis) dengan program (file yang dapat dieksekusi, seringkali dalam format ELF) yang berjalan di dalamnya.
Program tertentu (mis. /bin/bash
) dapat dijalankan dalam beberapa proses. Banyak executable tetap berada di disk Anda tanpa (pada saat tertentu) ada proses yang menjalankannya.
Di Linux, proc(5) sangat berguna untuk menanyakan kernel tentang status proses. Coba contoh cat /proc/$$/status
dan cat /proc/self/maps
. Lihat juga pgrep(1), ps(1), top(1).
Setiap proses memiliki ruang alamat virtualnya sendiri, tabel deskriptor filenya sendiri, direktori kerjanya sendiri, (dan seringkali beberapa utas, lihat pthreads(7)) dll dll...
apakah itu berarti pemilik lain tidak dapat menjalankan/mematikan/melanjutkan proses itu?
Menjalankan proses tidak masuk akal (ini sudah berlari). Namun, proses pid 1234 yang dapat dieksekusi tersedia sebagai /proc/1234/exe
symlink, dan Anda mungkin menggunakannya untuk execve(2) - tetapi Anda sebaiknya tidak melakukannya -. Aturan izin untuk execve
berlaku.
Untuk mematikan (2) suatu proses, Anda biasanya harus memiliki uid yang sama. Namun, dokumentasi mengatakan:
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session.
Untuk berhenti sebuah proses, gunakan SIGSTOP
(atau SIGTSTP
) sinyal digunakan dengan kill(2). Lihat sinyal(7).
Untuk melanjutkan proses yang dihentikan, gunakan SIGCONT
sinyal.
Pemilik biasanya adalah pengguna yang meluncurkan proses itu. Perintah tersebut mungkin dapat dijalankan oleh pengguna lain, tetapi itu akan menjadi proses yang berbeda.
apakah itu berarti pemilik lain tidak dapat menjalankan proses itu?
Tidak ada pemilik lain. Jangan bingung antara program (file yang dapat dijalankan) dan proses (program yang berjalan).
Apakah ini berarti pemilik lain tidak dapat menjalankan/mematikan/melanjutkan proses tersebut?
Pemilik tunggal sudah meluncurkan prosesnya. Jika yang Anda maksud adalah pengguna lainnya , bukan pemilik, itu tergantung.
Root, yaitu pengguna dengan uid
sama dengan 0, memiliki kekuatan penuh. Pengguna lain berbagi uid
yang sama adalah, dari sudut pandang OS, pengguna yang sama, jadi miliki kekuatan penuh pada prosesnya juga.
Pengguna dengan uid yang berbeda tidak akan dapat mematikan/menghentikan/melanjutkan proses, kecuali mereka diizinkan untuk beralih ke pemilik atau hak akses root melalui sudo
atau perintah serupa atau, pada tingkat lebih rendah, jika mereka terkait dengan proses itu dari hierarki mereka.