1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プロセスのシグナルマスクの状態を見るツールを作ってみた

Posted at

はじめに

プロセスがシグナルを無視しているのかシグナルハンドラを設定してるのかデフォルトなのかを知りたくなったのでツールを作ってみました。探せば「How can I check what signals a process is listening to?」とかいくつかあるのですが、個人的に POSIX シェル準拠にしたかったのとプロセスグループへの対応やシンプルな出力が欲しかったので。

ソースコード: https://github.com/ko1nksm/psig

使い方

シグナルの情報は /proc/<PID>/status から取得しているので procfs に対応しているシステム(Linux等)でのみ動作します。ただし WSL1 では情報が取れませんでした。おまけでケーパビリティにも対応しています。

Usage: psig [options]... [<pid> | 0 | -]...

  0: current proccess id
  -: parent proccess id
  no arguments: same as 'psig -'

Options:
  -g, --pgroup      Specify as a process group id
  -c, --capability  Include capability
  -h, --help        Display help

引数で指定した PID (複数可)を以下のように出力します。PID として 0 を指定した場合は psig コマンド自身、- を指定するか引数を省略した場合は親プロセスの情報を出力します。

$ psig 0
Name:psig State:R (running) PPID:17481 PID:20693 PGID:20693 SigQ:0/99217
Command: /bin/sh /home/koichi/bin/psig 0
SigIgn: 34:RTMIN
SigCgt: 2:INT 17:CHLD

出力例

出力例として各シェルのデフォルトのシグナルマスクの状態です。

all.sh
# !/bin/sh
for sh in sh bash mksh ksh posh yash zsh "busybox ash"; do
  echo "==== $sh ===="
  $sh "$@"
done
signal.sh
# !/bin/sh
psig
出力
$ ./all.sh signal.sh
==== sh ====
Name:sh State:S (sleeping) PPID:20618 PID:20619 PGID:20618 SigQ:0/99217
Command: sh signal.sh
SigIgn: 34:RTMIN
SigCgt: 2:INT 17:CHLD

==== bash ====
Name:bash State:S (sleeping) PPID:20618 PID:20625 PGID:20618 SigQ:0/99217
Command: bash signal.sh
SigBlk: 17:CHLD
SigIgn: 3:QUIT 34:RTMIN
SigCgt: 2:INT 17:CHLD

==== mksh ====
Name:mksh State:S (sleeping) PPID:20618 PID:20633 PGID:20618 SigQ:0/99217
Command: mksh signal.sh
SigIgn: 34:RTMIN
SigCgt: 1:HUP 2:INT 3:QUIT 14:ALRM 15:TERM 17:CHLD 28:WINCH

==== ksh ====
Name:ksh State:S (sleeping) PPID:20618 PID:20644 PGID:20618 SigQ:0/99217
Command: ksh signal.sh
SigIgn: 34:RTMIN
SigCgt: 1:HUP 2:INT 3:QUIT 14:ALRM 15:TERM 17:CHLD 28:WINCH

==== posh ====
Name:posh State:S (sleeping) PPID:20618 PID:20655 PGID:20618 SigQ:0/99217
Command: posh signal.sh
SigIgn: 34:RTMIN
SigCgt: 1:HUP 2:INT 3:QUIT 15:TERM

==== yash ====
Name:yash State:S (sleeping) PPID:20618 PID:20663 PGID:20618 SigQ:0/99217
Command: yash signal.sh
SigIgn: 34:RTMIN
SigCgt: 17:CHLD

==== zsh ====
Name:zsh State:S (sleeping) PPID:20618 PID:20673 PGID:20618 SigQ:0/99217
Command: zsh signal.sh
SigBlk: 2:INT
SigIgn: 3:QUIT 34:RTMIN
SigCgt: 1:HUP 17:CHLD 28:WINCH

==== busybox ash ====
Name:busybox State:S (sleeping) PPID:20618 PID:20682 PGID:20618 SigQ:0/99217
Command: busybox ash signal.sh
SigIgn: 3:QUIT 34:RTMIN
SigCgt: 2:INT 17:CHLD
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?