Proses adalah contoh program yang sedang berjalan. Linux adalah sistem operasi multitasking, yang berarti bahwa lebih dari satu proses dapat aktif sekaligus. Gunakan perintah ps untuk mengetahui proses apa yang sedang berjalan di sistem Anda.
Artikel ini menjelaskan 7 penggunaan praktis dari perintah ps dan opsinya.
Untuk memantau dan mengontrol proses, Linux menyediakan banyak perintah seperti ps, kill, killall, nice, renice dan perintah top.
1. Daftar Proses yang Sedang Berjalan (ps -ef, ps -aux)
Ini adalah contoh yang umum digunakan dengan perintah ps untuk membuat daftar semua proses yang sedang berjalan di mesin. Contoh berikut menunjukkan opsi perintah ps untuk mendapatkan semua proses.
$ ps -ef root 26551 5 0 Feb10 ? 00:03:41 [pdflush] root 26570 5 0 Feb10 ? 00:00:20 [pdflush] root 30344 3382 0 Feb21 ? 00:00:11 sshd: root@pts/14 root 30365 30344 0 Feb21 pts/14 00:00:02 -bash root 30393 3382 0 Feb21 ? 00:00:10 sshd: root@pts/15
Dimana:
- -e untuk menampilkan semua proses.
- -f untuk menampilkan daftar format lengkap.
Dalam kasus mesin BSD, Anda dapat menggunakan 'ps -aux' akan memberikan rincian tentang semua proses seperti yang ditunjukkan di atas.
$ ps -aux
2. Daftar Proses berdasarkan UID dan Perintah (ps -u, ps -C)
Gunakan opsi -u untuk menampilkan proses yang dimiliki oleh nama pengguna tertentu. Jika Anda memiliki beberapa nama pengguna, pisahkan menggunakan koma. Contoh di bawah ini menampilkan semua proses yang dimiliki oleh pengguna wwwrun, atau postfix.
$ ps -f -u wwwrun,postfix UID PID PPID C STIME TTY TIME CMD postfix 7457 7435 0 Mar09 ? 00:00:00 qmgr -l -t fifo -u wwwrun 7495 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7496 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7497 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7498 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7499 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 10078 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 10082 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf postfix 15677 7435 0 22:23 ? 00:00:00 pickup -l -t fifo -u
Seringkali ps digunakan dengan grep seperti “ps -aux | grep command” untuk mendapatkan daftar proses dengan perintah yang diberikan.
Tetapi perintah ps itu sendiri memiliki opsi untuk mencapai hal yang sama. Contoh berikut menunjukkan bahwa semua proses yang memiliki tatad.pl dalam eksekusi perintahnya.
$ ps -f -C tatad.pl UID PID PPID C STIME TTY TIME CMD root 9576 1 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9577 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9579 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9580 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9581 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9582 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 12133 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
Catatan: Kita dapat membuat alias untuk perintah ps untuk membuat daftar proses berdasarkan perintah, pengguna, atau grup.
3. Buat daftar proses berdasarkan PID atau PPID (ps -p, ps –ppid)
Setiap proses akan diberi ID Proses (PID) yang unik.
Saat Anda meluncurkan beberapa aplikasi, itu mungkin memotong sejumlah proses dan setiap sub proses akan memiliki PID sendiri. Jadi, setiap proses akan memiliki id proses dan id proses induknya sendiri.
Untuk semua proses yang proses fork akan memiliki PPID (pengidentifikasi proses induk) yang sama. Metode berikut digunakan untuk mendapatkan daftar proses dengan PPID tertentu.
$ ps -f --ppid 9576 UID PID PPID C STIME TTY TIME CMD root 9577 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9579 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9580 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9581 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 9582 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl root 12133 9576 0 Mar09 ? 00:00:00 /opt/tata/perl/bin/perl /opt/tata/bin/tatad.pl
Contoh berikut adalah daftar proses yang telah memberikan PID.
$ ps -f -p 25009,7258,2426 UID PID PPID C STIME TTY TIME CMD root 2426 4 0 Mar09 ? 00:00:00 [reiserfs/0] root 7258 1 0 Mar09 ? 00:00:00 /usr/sbin/nscd postfix 25009 7435 0 00:02 ? 00:00:00 pickup -l -t fifo -u
4. Mencantumkan Proses dalam Hirarki (ps –forest)
Contoh di bawah ini menampilkan Id proses dan perintah dalam hierarki. –forest adalah argumen untuk perintah ps yang menampilkan seni ASCII dari pohon proses. Dari pohon ini, kita dapat mengidentifikasi mana proses induk dan proses turunannya yang bercabang secara rekursif.
$ ps -e -o pid,args --forest 468 \_ sshd: root@pts/7 514 | \_ -bash 17484 \_ sshd: root@pts/11 17513 | \_ -bash 24004 | \_ vi ./790310__11117/journal 15513 \_ sshd: root@pts/1 15522 | \_ -bash 4280 \_ sshd: root@pts/5 4302 | \_ -bash
Catatan: Anda juga dapat menggunakan perintah tree dan pstree untuk menampilkan proses dalam struktur pohon yang bagus.
5. Daftar waktu dinding yang telah berlalu untuk proses (ps -o pid,etime=)
Jika Anda ingin mendapatkan waktu yang telah berlalu untuk proses yang sedang berjalan, perintah ps menyediakan etime yang menyediakan waktu yang telah berlalu sejak proses dimulai, dalam bentuk [[dd-]hh:]mm:ss.
Perintah di bawah ini menampilkan waktu yang telah berlalu untuk proses ID 1 (init) dan proses id 29675.
Misalnya “10-22:13:29” pada output mewakili proses yang sedang berjalan selama 10 hari, 22 jam, 13 menit, dan 29 detik. Karena proses init dimulai selama startup sistem, waktu ini akan sama dengan output dari perintah 'uptime'.
# ps -p 1,29675 -o pid,etime= PID 1 10-22:13:29 29675 1-02:58:46
6. Daftar semua utas untuk proses tertentu (ps -L)
Anda bisa mendapatkan daftar utas untuk prosesnya. Saat sebuah proses hang, kita mungkin perlu mengidentifikasi daftar thread yang berjalan untuk proses tertentu seperti yang ditunjukkan di bawah ini.
$ ps -C java -L -o pid,tid,pcpu,state,nlwp,args PID TID %CPU S NLWP COMMAND 16992 16992 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 16993 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 16994 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 16995 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 16996 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 16997 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 16998 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 16999 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 17000 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 17001 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 17002 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 17003 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 17024 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 15753 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006 16992 15754 0.0 S 15 ../jre/bin/java -Djava.ext.dirs=../jre/lib/ext:../lib:../auto_lib -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006
Opsi -L digunakan untuk menampilkan daftar utas untuk suatu proses yang memiliki perintah yang diberikan. Dan itu juga menampilkan nlwp, yang mewakili jumlah proses ringan. Dalam contoh di atas, total 15 utas java sedang berjalan.
7. Menemukan Kebocoran memori (ps –sort pmem)
Kebocoran memori, secara teknis, adalah penggunaan memori yang terus meningkat oleh aplikasi.
Pada aplikasi desktop umum, ini mungkin tidak diperhatikan, karena suatu proses biasanya membebaskan memori apa pun yang telah digunakannya saat Anda menutup aplikasi.
Namun, dalam model klien/server, kebocoran memori merupakan masalah serius, karena aplikasi diharapkan tersedia 24x7. Aplikasi tidak boleh terus meningkatkan penggunaan memorinya tanpa batas waktu, karena ini dapat menyebabkan masalah serius. Untuk memantau kebocoran memori tersebut, kita dapat menggunakan perintah berikut.
$ ps aux --sort pmem USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1520 508 ? S 2005 1:27 init inst 1309 0.0 0.4 344308 33048 ? S 2005 1:55 agnt (idle) inst 2919 0.0 0.4 345580 37368 ? S 2005 20:02 agnt (idle) inst 24594 0.0 0.4 345068 36960 ? S 2005 15:45 agnt (idle) root 27645 0.0 14.4 1231288 1183976 ? S 2005 3:01 /TaskServer/bin/./wrapper-linux-x86-32
Pada perintah ps di atas, opsi –sort menampilkan %MEM tertinggi di bagian bawah. Catat saja PID untuk penggunaan %MEM tertinggi. Kemudian gunakan perintah ps untuk melihat semua detail tentang id proses ini, dan pantau perubahannya dari waktu ke waktu. Anda harus mengulang ir secara manual atau menempatkannya sebagai cron ke file.
$ ps ev --pid=27645 PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 27645 ? S 3:01 0 25 1231262 1183976 14.4 /TaskServer/bin/./wrapper-linux-x86-32 $ ps ev --pid=27645 PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 27645 ? S 3:01 0 25 1231262 1183976 14.4 /TaskServer/bin/./wrapper-linux-x86-32
Catatan: Pada output di atas, jika RSS (ukuran set residen, dalam KB) meningkat seiring waktu (begitu juga %MEM), ini mungkin menunjukkan kebocoran memori dalam aplikasi.
Artikel sebelumnya dalam seri pemantauan dan penyetelan kinerja Linux:
- 10 Contoh Sar (Sysstat) yang Berguna untuk Pemantauan Kinerja UNIX / Linux
- Pengantar Pemantauan Kinerja dan Penyetelan Linux
- 15 Contoh Perintah Teratas Linux yang Praktis