GNU/Linux >> Belajar Linux >  >> Linux

Bisakah suatu proses memiliki pemilik? Apa artinya?

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.


Linux
  1. Apa arti &di akhir perintah linux?

  2. pembunuh proses apa yang dimiliki linux?

  3. Apa yang dimaksud dengan kemampuan ep?

  1. Apa Artinya “–” (tanda hubung ganda)?

  2. Apa Artinya Dalam Keluaran Dari Ps?

  3. Apa artinya %st di atas?

  1. Apa arti peringatan ini?

  2. Bagaimana jika [[ $? -ne 0 ]]; berarti dalam .ksh

  3. Apa yang dimaksud dengan #define X X?