Saya ingin membunuh semua proses yang berjalan dari pengguna tertentu baik dari skrip shell atau kode asli pada sistem Linux.
Apakah saya harus membaca direktori / proc dan mencari ini?
Ada ide? Apakah ada pemetaan dinamis dari pid di bawah UID di Linux? Bukankah ini ada di proc?
Jika tidak, lalu di mana daftar ini disimpan? Haruskah saya membacanya? Juga di mana daftar statis semua UID dalam sistem sehingga saya dapat memvalidasi pengguna ini ada dan kemudian melanjutkan untuk membunuh semua proses yang berjalan di bawahnya?
setuid()
.Jawaban:
Gunakan
pkill -U UID
ataupkill -u UID
atau nama pengguna alih-alih UID. Terkadangskill -u USERNAME
dapat bekerja, alat lain adalahkillall -u USERNAME
.Skill adalah linux-spesifik dan sekarang sudah ketinggalan zaman, dan pkill lebih portabel (Linux, Solaris, BSD).
pkill memungkinkan UID angka dan simbol, efektif dan nyata http://man7.org/linux/man-pages/man1/pkill.1.html
Halaman manual skill mengatakan apakah diizinkan hanya menggunakan nama pengguna, bukan id pengguna: http://man7.org/linux/man-pages/man1/skill.1.html
killall tidak ditandai sebagai usang di Linux, tetapi itu juga tidak akan bekerja dengan UID angka; hanya nama pengguna: http://man7.org/linux/man-pages/man1/killall.1.html
Saya pikir, utilitas apa pun yang digunakan untuk menemukan proses dalam Linux / Solaris style / proc (procfs) akan menggunakan daftar lengkap proses (melakukan readdir
/proc
). Saya pikir, mereka akan beralih pada/proc
subfolder digital dan memeriksa setiap proses yang ditemukan untuk kecocokan.Untuk mendapatkan daftar pengguna, gunakan
getpwent
(itu akan mendapatkan satu pengguna per panggilan).alat skill (procps & procps-ng) dan killall (psmisc) keduanya menggunakan
getpwnam
panggilan pustaka untuk menguraikan argumen-u
opsi, dan hanya nama pengguna yang akan diuraikan.pkill
(procps & procps-ng) menggunakan atol dan getpwnam untuk mem-parsing-u
/-U
berargumen dan memungkinkan specifier pengguna numerik dan tekstual.sumber
killall -u USERNAME
bekerja seperti pesonaJika Anda melewatkan -1 sebagai argumen ID proses ke
kill
perintah shell ataukill
fungsi C , maka sinyal dikirim ke semua proses yang dapat dijangkau, yang dalam praktiknya berarti semua proses pengguna yang menjalankankill
perintah atau syscall.Di C (pemeriksaan kesalahan dihilangkan):
sumber
Jika fungsi pkill tidak tersedia di distribusi UNIX / Linux Anda, Anda dapat menjalankan perintah berikut sebagai pengguna root:
di mana nama pengguna adalah pengguna yang memproses yang ingin Anda hapus
sumber
pkill -U username
.sumber
Ini bekerja dengan baik untuk saya. Anda dapat menemukan semua pid dari proses dengan nama pengguna dengan melakukan
ps U <username>
dan pergi dari sana. Coba ini:sumber