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 종료 - 모두 죽습니다.
- 프로세스 트리 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
이는 파이프 닫기를 무시하는 것으로 보이며 다시 열 수 있습니다. 마법에 대해 묻지 마세요