procps の ML を眺めていたら便利そうな新機能がマージされていた
gitlab.com
$ ./pidof -h
Usage:
lt-pidof [options] [program [...]]
Options:
-s, --single-shot return one PID only
-c, --check-root omit processes with different root
-x also find shells running the named scripts
-o, --omit-pid <PID,...> omit processes with PID
-S, --separator SEP use SEP as separator put between PIDs 👈
-h, --help display this help and exit
-V, --version output version information and exit
For more details see pidof(1).
誰に便利って、頻繁に strace 使う人向け (コミットの説明にもまんま例が書いてある)
I frequency use pidof command with strace system call tracer.
strace can trace MULTIPLE processes specified with "-p $PID"
arguments like:
strace -p 1 -p 1030 -p 3043
Sometimes I want to do as following
strace -p $(pidof httpd)
However, above command line doesn't work because -p option
is needed for specifying a pid. pidof uses a whitespace as
a separator. For passing the output to strace, the separator
should be replaced with ' -p '.
This maybe not a special to my use case.
This commit introduces -S option that allows a user to specify a
separator the one wants.
$ ./pidof bash
./pidof bash
24624 18790 12786 11898 11546 10766 7654 5095
$ ./pidof -S ',' bash
./pidof -S ',' bash
24624,18790,12786,11898,11546,10766,7654,5095
$ ./pidof -S '-p ' bash
./pidof -S '-p ' bash
24624-p 18790-p 12786-p 11898-p 11546-p 10766-p 7654-p 5095
$ ./pidof -S ' -p ' bash
./pidof -S ' -p ' bash
24624 -p 18790 -p 12786 -p 11898 -p 11546 -p 10766 -p 7654 -p 5095
$ strace -p $(./pidof -S ' -p ' bash)
strace -p $(./pidof -S ' -p ' bash)
strace: Process 24624 attached
strace: Process 18790 attached
strace: Process 12786 attached
...
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
parent c9be22a8 master
こんな感じで strace で複数プロセスに一度でアタッチできる! あーべんり〜 わかる〜
[vagrant@localhost procps]$ sudo strace -p $(./pidof nginx -S ' -p ')
strace: Process 9621 attached
strace: Process 9620 attached
strace: Process 9619 attached
[pid 9619] rt_sigsuspend([], 8 <unfinished ...> 👈
[pid 9620] epoll_wait(9, <unfinished ...> 👈
[pid 9621] epoll_wait(11, 👈
複数のコマンドを組み合わせて同様のことを実現するテクニックはあるのだが、 シンプルな手段があれば越したことはない