親プロセスでエラーが発生した場合、udevadm は終了しません。

親プロセスでエラーが発生した場合、udevadm は終了しません。

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で邪魔するとすっきり死にます。killudevadm

親bashプロセスを終了するとプロセスも終了するsocatので、次にラップしてudevadmみました。udevadmsh -c

sudo socat -u SYSTEM:'sh -c \"udevadm monitor\"' PIPE:/tmp/test &

死んでいく殻が死ぬと期待していましたが、udevadm役に立ちませんでした。

私は孤児プロセスがINITedすることができることを知っていますが、それはすべてのプロセスの中でudevadm死を欺く唯一の方法であるように見えるのでそうではありません。私の実験をまとめると、次のようになります。

  1. プロセスツリー bash->sudo->socat->udevadm -kill socat-all die
  2. プロセスツリーbash->sudo->socat->udevadm - 壊れたパイプ - udevadmのみが存在します。
  3. プロセスツリーbash->sudo->socat->sh->udevadm - 壊れたパイプ - udevadmのみが存在します。
  4. プロセスツリー bash->sudo->socat->yes-pipeburst-all dead
  5. プロセスツリーbash->sudo->socat->udevadm - sudo exit - すべて死ぬ。
  6. プロセスツリー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

これはパイプの閉鎖を無視するように見え、再び開くことができます。魔法について聞かないでください

おすすめ記事