Saturday, 25 November 2017

pgrep để grep process

pgrep có cài sẵn trên mọi máy tính *NIX.
Nó nằm trong gói procps, một package cơ bản, chứa các câu lệnh thường ngày như `ps`, `kill`, `top`...

$ dpkg -S `which pgrep`
procps: /usr/bin/pgrep
`pgrep` thường chỉ được dùng để lấy đầu ra, làm đầu vào cho lệnh kill, mặc định, nó trả về list các PID của process có tên ứng với từ khóa tìm kiếm:

```
$ pgrep cron
978
```

Thường sau đó sẽ là: kill -9 978
Hay trong 1 câu:

```
kill -9 $(pgrep cron)
```
Hay dùng luôn câu lệnh pkill:
```
pkill -9 cron
```

`pgrep` có option ít ai để ý tới: `-a`

```
-a, --list-full
  List the full command line as well as the process ID.  (pgrep only.)
```
Và `-l` nếu chỉ hiển thị tên process.

Vậy nếu chỉ muốn tìm 1 process với tên đã biết, ta có thể pgrep -a firefox, thay vì ps xau | grrep firefox

```
$ pgrep -l dns
2377 dnsmasq
18639 gvfsd-dnssd

$ pgrep -a dns
2377 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
18639 /usr/lib/gvfs/gvfsd-dnssd --spawner :1.1 /org/gtk/gvfs/exec_spaw/5

$ ps xau | grep dn[s]
nobody    2377  0.0  0.0  54396  2268 ?        S    Nov20   0:02 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
hvn      18639  0.0  0.1 363248  6648 ?        Sl   13:39   0:00 /usr/lib/gvfs/gvfsd-dnssd --spawner :1.1 /org/gtk/gvfs/exec_spaw/5

```
Hết.
HVN at http://www.familug.org/ and http://pymi.vn

Đăng ký học #Python tại https://pymi.vn/
Nhập email vào http://invite.pymi.vn/ để nhận thư mời tham gia forum hỏi đáp Python, Django, Golang, Linux ...