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:00Interval 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) SIGTERMPerhatikan 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
22123PKILL
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 stopJika 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 pekerjaSaya 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 nginxsecHal 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.
5 tips untuk meningkatkan produktivitas dengan zsh Perintah terminal Linux mana yang paling sering Anda gunakan?Linux