Linux命令——pgrep
参考:Linux pgrep Command Tutorial for Beginners (10 Examples)
bash基础——grep、基本正则表达式、扩展正则表达式、fgrep
简介
这个命令也是用来查看进程(或线程)信息的。可以理解成是ps+grep
举例
根据用户ID,用户名查找进程(或线程)
使用-u参数。
这一点要称赞pgrep,不像ps(-u接uid,-U接username),-u可以包含uid和username两种情况
[root@localhost lib]# pgrep -u 0 -d: 1:2:3:5:7:8:9:10:11:12:13:14:16:17:18:19:21:22:23:24:26:27:28:29:30:31:32:33:34:36:37:38:39:40:41:42:43:44:45:46:48:49:50:51:52:53:54:55:56:57:63:64:65:66:74:75:76:77:78:79:80:93:94:128:148:323:324:325:333:334:335:336:337:338:339:342:343:357:360:363:421:422:432:433:447:448:449:450:451:452:453:454:455:456:457:458:527:554:563:591:605:661:662:663:664:665:666:667:668:669:671:672:676:680:681:682:683:684:685:686:687:708:741:742:750:759:767:917:918:942:1004:1005:1006:1017:1098:1265:1271:1287:1288:1289:1293:1341:1426:1994:2126:2151:2210:2229 [root@localhost lib]# pgrep -u root -d: 1:2:3:5:7:8:9:10:11:12:13:14:16:17:18:19:21:22:23:24:26:27:28:29:30:31:32:33:34:36:37:38:39:40:41:42:43:44:45:46:48:49:50:51:52:53:54:55:56:57:63:64:65:66:74:75:76:77:78:79:80:93:94:128:148:323:324:325:333:334:335:336:337:338:339:342:343:357:360:363:421:422:432:433:447:448:449:450:451:452:453:454:455:456:457:458:527:554:563:591:605:661:662:663:664:665:666:667:668:669:671:672:676:680:681:682:683:684:685:686:687:708:741:742:750:759:767:917:918:942:1004:1005:1006:1017:1098:1265:1271:1287:1288:1289:1293:1341:1426:1994:2126:2151:2210:2229
ps的-G好很多,可以接gid和groupname
自定义分隔符
上面的例子我使用了-d参数,这个就是用来自定义分隔符的,默认是换行符,所以默认情况的输出会很多行,如下
[root@localhost lib]# pgrep -u root 1 2 3 5 7 8 9 10 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 57 63 64 65 66 74 75 76 77 78 79 80 93 94 128 148 323 324 325 333 334 335 336 337 338 339 342 343 357 360 363 421 422 432 433 447 448 449 450 451 452 453 454 455 456 457 458 527 554 563 591 605 661 662 663 664 665 666 667 668 669 671 672 676 680 681 682 683 684 685 686 687 708 741 742 750 759 767 917 918 942 1004 1005 1006 1017 1098 1265 1271 1287 1288 1289 1293 1341 1426 1994 2151 2210 2255 2256
为了输出美观,第一个例子我更改了分隔符
显示进程(或线程)名字
上面那个例子,虽然把root的进程(或线程)都找到了,但是只有ID,太不方便了。
使用-l参数,可以把进程(或线程)名字显示出来。
[root@localhost lib]# pgrep -u root -l 1 systemd 2 kthreadd 3 ksoftirqd/0 5 kworker/0:0H 7 migration/0 8 rcu_bh 9 rcu_sched 10 lru-add-drain 11 watchdog/0 12 watchdog/1 13 migration/1 14 ksoftirqd/1 16 kworker/1:0H 17 watchdog/2 18 migration/2 19 ksoftirqd/2 21 kworker/2:0H 22 watchdog/3 23 migration/3 24 ksoftirqd/3 26 kworker/3:0H 27 watchdog/4 28 migration/4 29 ksoftirqd/4 30 kworker/4:0 31 kworker/4:0H 32 watchdog/5 33 migration/5 34 ksoftirqd/5 36 kworker/5:0H 37 watchdog/6 38 migration/6 39 ksoftirqd/6 40 kworker/6:0 41 kworker/6:0H 42 watchdog/7 43 migration/7 44 ksoftirqd/7 45 kworker/7:0 46 kworker/7:0H 48 kdevtmpfs 49 netns 50 khungtaskd 51 writeback 52 kintegrityd 53 bioset 54 kblockd 55 md 56 edac-poller 57 kworker/0:1 63 kswapd0 64 ksmd 65 khugepaged 66 crypto 74 kthrotld 75 kworker/u256:1 76 kmpath_rdacd 77 kaluad 78 kpsmoused 79 kworker/0:2 80 ipv6_addrconf 93 deferwq 94 kworker/3:1 128 kauditd 148 kworker/2:1 323 ata_sff 324 mpt_poll_0 325 mpt/0 333 scsi_eh_0 334 scsi_tmf_0 335 kworker/u256:2 336 scsi_eh_1 337 scsi_tmf_1 338 scsi_eh_2 339 scsi_tmf_2 342 ttm_swap 343 irq/16-vmwgfx 357 kworker/7:2 360 kworker/4:2 363 kworker/1:2 421 kdmflush 422 bioset 432 kdmflush 433 bioset 447 bioset 448 xfsalloc 449 xfs_mru_cache 450 xfs-buf/dm-0 451 xfs-data/dm-0 452 xfs-conv/dm-0 453 xfs-cil/dm-0 454 xfs-reclaim/dm- 455 xfs-log/dm-0 456 xfs-eofblocks/d 457 xfsaild/dm-0 458 kworker/6:1H 527 systemd-journal 554 lvmetad 563 systemd-udevd 591 nfit 605 kworker/6:2 661 kvm-irqfd-clean 662 xfs-buf/sda1 663 xfs-data/sda1 664 xfs-conv/sda1 665 xfs-cil/sda1 666 xfs-reclaim/sda 667 xfs-log/sda1 668 xfs-eofblocks/s 669 xfsaild/sda1 671 kdmflush 672 bioset 676 kworker/3:2 680 xfs-buf/dm-2 681 xfs-data/dm-2 682 xfs-conv/dm-2 683 xfs-cil/dm-2 684 xfs-reclaim/dm- 685 xfs-log/dm-2 686 xfs-eofblocks/d 687 xfsaild/dm-2 708 auditd 741 systemd-logind 742 irqbalance 750 crond 759 ksmtuned 767 login 917 kworker/7:1H 918 kworker/0:1H 942 dhclient 1004 rsyslogd 1005 tuned 1006 sshd 1017 kworker/2:2 1098 master 1265 kworker/1:1H 1271 bash 1287 kworker/4:1H 1288 kworker/5:1H 1289 sshd 1293 bash 1341 kworker/3:1H 1426 kworker/2:1H 1994 kworker/5:2 2151 kworker/5:0 2210 kworker/1:1 2256 kworker/1:0 2326 kworker/5:1 2334 sleep
显示命令行命
使用-a参数还可以把这个进程(或线程)启动时的命令行显示出来
pstree也是使用-a显式命令行
[root@localhost lib]# pgrep -u root -a 1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 2 kthreadd 3 ksoftirqd/0 5 kworker/0:0H 7 migration/0 8 rcu_bh 9 rcu_sched 10 lru-add-drain 11 watchdog/0 12 watchdog/1 13 migration/1 14 ksoftirqd/1 16 kworker/1:0H 17 watchdog/2 18 migration/2 19 ksoftirqd/2 21 kworker/2:0H 22 watchdog/3 23 migration/3 24 ksoftirqd/3 26 kworker/3:0H 27 watchdog/4 28 migration/4 29 ksoftirqd/4 30 kworker/4:0 31 kworker/4:0H 32 watchdog/5 33 migration/5 34 ksoftirqd/5 36 kworker/5:0H 37 watchdog/6 38 migration/6 39 ksoftirqd/6 40 kworker/6:0 41 kworker/6:0H 42 watchdog/7 43 migration/7 44 ksoftirqd/7 45 kworker/7:0 46 kworker/7:0H 48 kdevtmpfs 49 netns 50 khungtaskd 51 writeback 52 kintegrityd 53 bioset 54 kblockd 55 md 56 edac-poller 57 kworker/0:1 63 kswapd0 64 ksmd 65 khugepaged 66 crypto 74 kthrotld 75 kworker/u256:1 76 kmpath_rdacd 77 kaluad 78 kpsmoused 79 kworker/0:2 80 ipv6_addrconf 93 deferwq 94 kworker/3:1 128 kauditd 148 kworker/2:1 323 ata_sff 324 mpt_poll_0 325 mpt/0 333 scsi_eh_0 334 scsi_tmf_0 335 kworker/u256:2 336 scsi_eh_1 337 scsi_tmf_1 338 scsi_eh_2 339 scsi_tmf_2 342 ttm_swap 343 irq/16-vmwgfx 357 kworker/7:2 360 kworker/4:2 363 kworker/1:2 421 kdmflush 422 bioset 432 kdmflush 433 bioset 447 bioset 448 xfsalloc 449 xfs_mru_cache 450 xfs-buf/dm-0 451 xfs-data/dm-0 452 xfs-conv/dm-0 453 xfs-cil/dm-0 454 xfs-reclaim/dm- 455 xfs-log/dm-0 456 xfs-eofblocks/d 457 xfsaild/dm-0 458 kworker/6:1H 527 /usr/lib/systemd/systemd-journald 554 /usr/sbin/lvmetad -f 563 /usr/lib/systemd/systemd-udevd 591 nfit 605 kworker/6:2 661 kvm-irqfd-clean 662 xfs-buf/sda1 663 xfs-data/sda1 664 xfs-conv/sda1 665 xfs-cil/sda1 666 xfs-reclaim/sda 667 xfs-log/sda1 668 xfs-eofblocks/s 669 xfsaild/sda1 671 kdmflush 672 bioset 676 kworker/3:2 680 xfs-buf/dm-2 681 xfs-data/dm-2 682 xfs-conv/dm-2 683 xfs-cil/dm-2 684 xfs-reclaim/dm- 685 xfs-log/dm-2 686 xfs-eofblocks/d 687 xfsaild/dm-2 708 /sbin/auditd 741 /usr/lib/systemd/systemd-logind 742 /usr/sbin/irqbalance --foreground 750 /usr/sbin/crond -n 759 /bin/bash /usr/sbin/ksmtuned 767 login -- root 917 kworker/7:1H 918 kworker/0:1H 942 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-290edd36-584d-4eb9-b155-48b899711cf4-eth0.lease -pf /var/run/dhclient-eth0.pid eth0 1004 /usr/sbin/rsyslogd -n 1005 /usr/bin/python -Es /usr/sbin/tuned -l -P 1006 /usr/sbin/sshd -D 1017 kworker/2:2 1098 /usr/libexec/postfix/master -w 1265 kworker/1:1H 1271 -bash 1287 kworker/4:1H 1288 kworker/5:1H 1289 sshd: root@pts/0 1293 -bash 1341 kworker/3:1H 1426 kworker/2:1H 1994 kworker/5:2 2151 kworker/5:0 2210 kworker/1:1 2256 kworker/1:0 2326 kworker/5:1 2343 sleep 60
找出满足条件的最新/最老的一个进程(或线程)
比如root用户,他可能启动了很多进程(或线程),那么最近最新的是哪一个,使用-n(new)参数
[root@localhost lib]# pgrep -u root -a -n 2352 sleep 60
如果找最老的那个进程(或线程),使用-o(old)参数(这个不是initd就是systemd)
[root@localhost lib]# pgrep -u root -a -o 1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
统计满足条件进程(线程)的个数
使用参数-c
pstree的-c是展开折叠
[root@localhost lib]# pgrep -u root -c 148