
udevadm monitor
出力を名前付きパイプにリダイレクトする必要があります。これを行うには、次のコマンドを使用します。
sudo socat -u SYSTEM:"udevadm monitor" PIPE:/tmp/test &
パイプから読み取られるプロセスが、socat
「壊れたパイプ」エラー(予想される)によって中断されるまで機能します。ただし、実行中のプロセスを一覧表示すると、そのプロセスがまだ実行中であることがわかりましたudevadm
。
$ps -a PID TTY時間CMD 3539 tty1 00:00:00 強打 3619 tty2 00:00:00 強打 3972ポイント/0 00:00:00ps $ sudo socat -u システム: "udevadm monitor" パイプ: /tmp/test & [1]3973 $ps -a PID TTY時間CMD 3539 tty1 00:00:00 強打 3619 tty2 00:00:00 強打 3973ポイント/0 00:00:00 須藤 3974ポイント/0 00:00:00 ソカト 3975分/0 00:00:00 ソカト 3976 min/0 00:00:00 ウッドバーデム 3977ポイント/0 00:00:00ps $cat/tmp/テスト モニターは受信したイベントを印刷します。 UDEV - ルール処理後にudevで発生するイベント カーネル - カーネル uevent ^C $ 2020/06/01 12:36:06 socat[3974] E write(6, 0x1dfbc60, 147): パイプ損傷 [1]+ 1番出口 sudo socat -u システム: "udevadm monitor" パイプ:/tmp/test $ps -a PID TTY時間CMD 3539 tty1 00:00:00 強打 3619 tty2 00:00:00 強打 3976 min/0 00:00:00 ウッドバーデム 3980分/0 00:00:00ps $
udevadm monitor
に置き換えたときyes
(単純にデータストリームをパイプに供給)と一緒に消えましたsocat
。
ただ命令socat
で邪魔するとすっきり死にます。kill
udevadm
親bashプロセスを終了するとプロセスも終了するsocat
ので、次にラップしてudevadm
みました。udevadm
sh -c
sudo socat -u SYSTEM:'sh -c \"udevadm monitor\"' PIPE:/tmp/test &
死んでいく殻が死ぬと期待していましたが、udevadm
役に立ちませんでした。
私は孤児プロセスがINITedすることができることを知っていますが、それはすべてのプロセスの中でudevadm
死を欺く唯一の方法であるように見えるのでそうではありません。私の実験をまとめると、次のようになります。
- プロセスツリー bash->sudo->socat->udevadm -kill
socat
-all die - プロセスツリーbash->sudo->socat->udevadm - 壊れたパイプ - udevadmのみが存在します。
- プロセスツリーbash->sudo->socat->sh->udevadm - 壊れたパイプ - udevadmのみが存在します。
- プロセスツリー bash->sudo->socat->yes-pipeburst-all dead
- プロセスツリーbash->sudo->socat->udevadm - sudo exit - すべて死ぬ。
- プロセスツリーbash->sudo->socat->udevadm - kill bash - すべて死ぬ。
私が本当に解決したい問題は遅いudevadm
プロセスです。
私が好む解決策は、udevadm
他のプロセスで素敵に死ぬことです。許容される解決策は、読み取りプロセスが終了したときに途切れない永久パイプを使用することです。
問題を解決するsocat
ために渡すオプションや設定はありますか?udevadm
出力をパイプに送信するsocat
最終的な目標が間違っている場合は、提案を受け入れることができます。udevadm
答え1
いくつかの魔法を使用しているように見えますが、両方のアドレスを逆にしてnofork
システムコマンドにオプションを追加できます。方向を変えるには、コース-u
に切り替える必要があります。-U
socat -U PIPE:/tmp/test SYSTEM:"udevadm monitor",nofork
これはパイプの閉鎖を無視するように見え、再び開くことができます。魔法について聞かないでください