GNU/Linux >> Belajar Linux >  >> Linux

8 perintah Linux untuk manajemen proses yang efektif

Umumnya, siklus hidup proses aplikasi memiliki tiga status utama:start, run, dan stop. Setiap negara bagian dapat dan harus dikelola dengan hati-hati jika kita ingin menjadi administrator yang kompeten. Kedelapan perintah ini dapat digunakan untuk mengelola proses melalui siklus hidupnya.

Memulai proses

Cara termudah untuk memulai proses adalah dengan mengetikkan namanya di baris perintah dan tekan Enter. Jika Anda ingin memulai server web Nginx, ketik nginx . Mungkin Anda hanya ingin memeriksa versinya.

alan@workstation:~$ nginx

alan@workstation:~$ nginx -v
versi nginx:nginx/1.14.0

Melihat jalur yang dapat dieksekusi

Demonstrasi di atas untuk memulai suatu proses mengasumsikan file yang dapat dieksekusi terletak di jalur Anda yang dapat dieksekusi. Memahami jalur ini adalah kunci untuk memulai dan mengelola proses dengan andal. Administrator sering menyesuaikan jalur ini untuk tujuan yang diinginkan. Anda dapat melihat jalur yang dapat dijalankan menggunakan echo $PATH .

alan@workstation:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

MANA

Gunakan perintah which untuk melihat path lengkap dari file yang dapat dieksekusi.

alan@workstation:~$ which nginx                                                    
/opt/nginx/bin/nginx

Saya akan menggunakan perangkat lunak server web populer Nginx untuk contoh saya. Mari kita asumsikan bahwa Nginx diinstal. Jika perintah yang nginx tidak mengembalikan apa pun, maka Nginx tidak ditemukan karena yang hanya mencari jalur yang dapat dieksekusi yang Anda tentukan. Ada tiga cara untuk memperbaiki situasi di mana proses tidak dapat dimulai hanya dengan nama. Yang pertama adalah mengetikkan path lengkap. Meskipun, saya lebih suka tidak harus mengetik semua itu, bukan?

alan@workstation:~$ /home/alan/web/prod/nginx/sbin/nginx -v
versi nginx:nginx/1.14.0

Terminal Linux

  • 7 emulator terminal teratas untuk Linux
  • 10 alat baris perintah untuk analisis data di Linux
  • Unduh Sekarang:lembar contekan SSH
  • Lembar contekan perintah Linux tingkat lanjut
  • Tutorial baris perintah Linux

Solusi kedua adalah menginstal aplikasi di direktori di jalur yang dapat dieksekusi. Namun, ini mungkin tidak dapat dilakukan, terutama jika Anda tidak memiliki hak akses root.

Solusi ketiga adalah memperbarui variabel lingkungan jalur yang dapat dieksekusi untuk memasukkan direktori tempat aplikasi spesifik yang ingin Anda gunakan diinstal. Solusi ini bergantung pada shell. Misalnya, pengguna Bash perlu mengedit baris PATH=di file .bashrc mereka.

PATH="$HOME/web/prod/nginx/sbin:$PATH" 

Sekarang, ulangi gema Anda dan perintah mana atau coba periksa versinya. Jauh lebih mudah!

alan@workstation:~$ echo $PATH
/home/alan/web/prod/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr /bin

alan@workstation:~$ which nginx
/home/alan/web/prod/nginx/sbin/nginx

alan@workstation:~$ nginx -v                                                
versi nginx:nginx/1.14.0

Menjaga proses tetap berjalan

NOHUP

Suatu proses mungkin tidak terus berjalan ketika Anda keluar atau menutup terminal Anda. Kasus khusus ini dapat dihindari dengan mendahului perintah yang ingin Anda jalankan dengan perintah nohup. Juga, menambahkan ampersand (&) akan mengirim proses ke latar belakang dan memungkinkan Anda untuk terus menggunakan terminal. Misalnya, Anda ingin menjalankan myprogram.sh.

nohup myprogram.sh & 

Satu hal menyenangkan yang dilakukan nohup adalah mengembalikan PID proses yang sedang berjalan. Saya akan berbicara lebih banyak tentang PID selanjutnya.

Mengelola proses yang sedang berjalan

Terminal Linux

  • 7 emulator terminal teratas untuk Linux
  • 10 alat baris perintah untuk analisis data di Linux
  • Unduh Sekarang:lembar contekan SSH
  • Lembar contekan perintah Linux tingkat lanjut
  • Tutorial baris perintah Linux

Setiap proses diberi nomor identifikasi proses (PID) yang unik. Nomor inilah yang kami gunakan untuk mengelola setiap proses. Kita juga dapat menggunakan nama proses, seperti yang akan saya tunjukkan di bawah. Ada beberapa perintah yang dapat memeriksa status proses yang sedang berjalan. Mari kita lihat sekilas ini.

PS

Yang paling umum adalah ps. Output default dari ps adalah daftar sederhana dari proses yang berjalan di terminal Anda saat ini. Seperti yang Anda lihat di bawah, kolom pertama berisi PID.

alan@workstation:~$ ps
PID TTY          TIME CMD
23989 pts/0    00:00:00 bash
24148 pts/0    00:00:00 ps

Saya ingin melihat proses Nginx yang saya mulai sebelumnya. Untuk melakukan ini, saya memberi tahu ps untuk menunjukkan kepada saya setiap proses yang berjalan (-e ) dan daftar lengkap (-f ).

alan@workstation:~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug18 ? 00:00:10 /sbin/init splash
root         2     0  0 Aug18 ? 00:00:00 [kthreadd]
root         4     2  0 Aug18 ? 00:00:00 [kworker/0:0H]
root         6     2  0 Aug18 ? 00:00:00 [mm_percpu_wq]
root         7     2  0 Aug18 ? 00:00:00 [ksoftirqd/0]
root         8     2  0 Aug18 ? 00:00:20 [rcu_sched]
root         9     2  0 Aug18 ? 00:00:00 [rcu_bh]
root        10     2  0 Aug18 ? 00:00:00 [migration/0]
root        11     2  0 Aug18 ? 00:00:00 [watchdog/0]
root        12     2  0 Aug18 ? 00:00:00 [cpuhp/0]
root        13     2  0 Aug18 ? 00:00:00 [cpuhp/1]
root        14     2  0 Aug18 ? 00:00:00 [watchdog/1]
root        15     2  0 Aug18 ? 00:00:00 [migration/1]
root        16     2  0 Aug18 ? 00:00:00 [ksoftirqd/1]
alan     20506 20496  0 10:39 pts/0    00:00:00 bash
alan     20520  1454  0 10:39 ? 00:00:00 nginx:master proses nginx
alan     20521 20520  0 10:39 ? 00:00:00 nginx:proses pekerja
alan     20526 20506  0 10:39 pts/0    00:00:00 man ps
alan     20536 20526  0 10:39 pts/0    00:00:00 pager
alan     20564 20496  0 10:40 pts/1    00:00:00 bash

Anda dapat melihat proses Nginx pada output dari perintah ps di atas. Perintah tersebut menampilkan hampir 300 baris, tetapi saya mempersingkatnya untuk ilustrasi ini. Seperti yang dapat Anda bayangkan, mencoba menangani 300 baris informasi proses agak berantakan. Kita dapat menyalurkan output ini ke grep untuk menyaring nginx.

alan@workstation:~$ ps -ef |grep nginx
alan     20520  1454  0 10:39 ? 00:00:00 nginx:master proses nginx
alan     20521 20520  0 10:39 ? 00:00:00 nginx:proses pekerja

Itu lebih baik. Kita dapat dengan cepat melihat bahwa Nginx memiliki PID 20520 dan 20521.

PGREP

Perintah pgrep dibuat untuk lebih menyederhanakan berbagai hal dengan menghilangkan kebutuhan untuk memanggil grep secara terpisah.

alan@workstation:~$ pgrep nginx
20520
20521

Misalkan Anda berada di lingkungan hosting di mana banyak pengguna menjalankan beberapa instance Nginx yang berbeda. Anda dapat mengecualikan orang lain dari keluaran dengan -u pilihan.

alan@workstation:~$ pgrep -u alan nginx
20520
20521

PIDOF

Satu lagi yang bagus adalah pidof. Perintah ini akan memeriksa PID biner tertentu bahkan jika proses lain dengan nama yang sama sedang berjalan. Untuk menyiapkan contoh, saya menyalin Nginx saya ke direktori kedua dan memulainya dengan set awalan yang sesuai. Dalam kehidupan nyata, instance ini bisa berada di lokasi yang berbeda, seperti direktori yang dimiliki oleh pengguna yang berbeda. Jika saya menjalankan kedua instance Nginx, ps -ef output menunjukkan semua prosesnya.

alan@workstation:~$ ps -ef |grep nginx
alan     20881  1454  0 11:18 ? 00:00:00 nginx:master process ./nginx -p /home/alan/web/prod/nginxsec
alan     20882 20881  0 11:18 ? 00:00:00 nginx:proses pekerja
alan     20895  1454  0 11:19 ? 00:00:00 nginx:master proses nginx
alan     20896 20895  0 11:19 ? 00:00:00 nginx:proses pekerja

Menggunakan grep atau pgrep akan menampilkan nomor PID, tetapi kami mungkin tidak dapat membedakan instance mana.

alan@workstation:~$ pgrep nginx
20881
20882
20895
20896

Perintah pidof dapat digunakan untuk menentukan PID dari setiap instance Nginx tertentu.

alan@workstation:~$ pidof /home/alan/web/prod/nginxsec/sbin/nginx
20882 20881

alan@workstation:~$ pidof /home/alan/ web/prod/nginx/sbin/nginx
20896 20895

ATAS

Perintah top telah ada sejak lama dan sangat berguna untuk melihat detail proses yang sedang berjalan dan dengan cepat mengidentifikasi masalah seperti memory hog. Tampilan defaultnya ditunjukkan di bawah ini.

atas - 11:56:28 hingga 1 hari, 13:37,  1 pengguna,  rata-rata pemuatan:0,09, 0,04, 0,03
Tugas:292 total,   3 berlari, 225 tidur,   0 berhenti,   0 zombie
%Cpu(s): 0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :16387132 total, 10854648 gratis,  1859036 digunakan,  3673448 buff /cache
KiB Swap:       0 total,        0 gratis,        0 digunakan. 14176540 faedah Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
17270 alan      20   0 3930764 247288    9804962 R /me 5:7048. alan      20   0  816144  45416  29844 S   0.5  0.3   0:22.16 gnome-terminal-
21110 alan      20   0   41940   3988   3188 R   0.1  0.0    16   
   17 atas 10.72 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd
    4 root       0 -20       0     0.0 . -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
    7 root      20   0       0      0      0 S   0.0>  0.0   0:00

Interval pembaruan dapat diubah dengan mengetikkan huruf s diikuti dengan jumlah detik yang Anda inginkan untuk pembaruan. Untuk mempermudah memantau contoh proses Nginx kita, kita dapat memanggil top dan meneruskan PID menggunakan -p pilihan. Output ini jauh lebih bersih.

alan@workstation:~$ top -p20881 -p20882 -p20895 -p20896

Tugas:  4 total,   0 berjalan,   4 tidur,   0 berhenti,   0 zombie
%Cpu(s ): 2.8 us,  1.3 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :16387132 total, 10856008 gratis,  1857648 digunakan,  3673476 buff/cache
KiB Tukar:       0 total,        0 gratis,        0 digunakan. 14177928 faed Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
20881 alan      20   0   12016    348      348 00 ngin 0   12460   1644    932 S   0.0  0.0   0:00.00 nginx
20895 alan      20   0   12016    352      0 S   0.0  0.0   0:00.00 nginx
 0 162 20  >

Penting untuk menentukan PID dengan benar saat mengelola proses, terutama menghentikannya. Selain itu, jika menggunakan top dengan cara ini, setiap kali salah satu dari proses ini dihentikan atau yang baru dimulai, top perlu diberi tahu tentang yang baru.

Menghentikan proses

BUNUH

Menariknya, tidak ada perintah berhenti. Di Linux, ada perintah kill. Kill digunakan untuk mengirim sinyal ke suatu proses. Sinyal yang paling umum digunakan adalah "terminate" (SIGTERM) atau "kill" (SIGKILL). Namun, ada banyak lagi. Di bawah ini adalah beberapa contoh. Daftar lengkap dapat ditampilkan dengan kill -L .

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE     >  9) SIGKILL 14) SIGALRM     15) SIGTERM

Perhatikan sinyal nomor sembilan adalah SIGKILL. Biasanya, kami mengeluarkan perintah seperti kill -9 20896 . Sinyal default adalah 15, yaitu SIGTERM. Perlu diingat bahwa banyak aplikasi memiliki metode sendiri untuk berhenti. Nginx menggunakan -s pilihan untuk melewatkan sinyal seperti "stop" atau "reload". Secara umum, saya lebih suka menggunakan metode khusus aplikasi untuk menghentikan operasi. Namun, saya akan mendemonstrasikan perintah kill untuk menghentikan proses Nginx 20896 lalu mengonfirmasi bahwa itu dihentikan dengan pgrep. PID 20896 tidak lagi muncul.

alan@workstation:~$ kill -9 20896
 
alan@workstation:~$ pgrep nginx
20881
20882
20895
22123

PKILL

Perintah pkill mirip dengan pgrep karena dapat mencari berdasarkan nama. Ini berarti Anda harus sangat berhati-hati saat menggunakan pkill. Dalam contoh saya dengan Nginx, saya mungkin tidak memilih untuk menggunakannya jika saya hanya ingin membunuh satu instance Nginx. Saya dapat melewati opsi Nginx -s berhenti ke instance tertentu untuk mematikannya, atau saya perlu menggunakan grep untuk memfilter output ps penuh.

/home/alan/web/prod/nginx/sbin/nginx -s stop

/home/alan/web/prod/nginxsec/sbin/nginx -s stop

Jika saya ingin menggunakan pkill, saya dapat menyertakan -f opsi untuk meminta pkill memfilter seluruh argumen baris perintah lengkap. Ini tentu saja juga berlaku untuk pgrep. Jadi, pertama saya dapat memeriksa dengan pgrep -a sebelum mengeluarkan pkill -f .

alan@workstation:~$ pgrep -a nginx
20881 nginx:master proses ./nginx -p /home/alan/web/prod/nginxsec
20882 nginx:proses pekerja
20895 nginx:proses master nginx
20896 nginx:proses pekerja

Saya juga dapat mempersempit hasil saya dengan pgrep -f . Argumen yang sama yang digunakan dengan pkill menghentikan proses.

alan@workstation:~$ pgrep -f nginxsec
20881
                                         
alan@workstation:~$ pkill -f nginxsec

Hal utama yang perlu diingat dengan pgrep (dan terutama pkill) adalah Anda harus selalu yakin bahwa hasil penelusuran Anda akurat sehingga Anda tidak secara tidak sengaja memengaruhi proses yang salah.

Sebagian besar perintah ini memiliki banyak opsi baris perintah, jadi saya selalu menyarankan untuk membaca halaman manual di masing-masingnya. Meskipun sebagian besar ada di seluruh platform seperti Linux, Solaris, dan BSD, ada beberapa perbedaan. Selalu uji dan bersiaplah untuk mengoreksi jika diperlukan saat bekerja di baris perintah atau menulis skrip.


Linux
  1. Perintah Linux favorit saya untuk mengoptimalkan gambar web

  2. 20 perintah Linux penting untuk setiap pengguna

  3. Lembar contekan untuk perintah umum Linux

  1. 10 Perintah Linux Untuk Diagnostik Jaringan

  2. Dasar-dasar Perintah Linux:7 perintah untuk manajemen proses

  3. Pustaka Python untuk manajemen proses Linux

  1. 12 Perintah Berguna Untuk Memfilter Teks untuk Operasi File yang Efektif di Linux

  2. Perintah Linux:Cara memanipulasi prioritas proses

  3. Monitor Proses setara untuk Linux?