/dev/null
EOF를 즉시 반환하는 대신 영원히 차단을 발생시키는 read
변형을 찾고 있습니다 . 그런 장치가 존재하나요?
원하는 효과를 얻기 위해 (를 통해) 명명된 파이프를 생성할 수도 있지만 mkfifo
스크립트 끝에서 FIFO 연결 해제를 처리하고 싶지는 않습니다.
상황에 맞게 RPC 서버가 종료될 때까지 기다리고 싶습니다. 폴링을 피하기 위해 netcat을 통해 연결을 엽니다.
netcat localhost 12345
서버가 종료되면 연결이 자동으로 종료됩니다. 불행히도 SSH를 통해 명령을 실행할 때 stdin은 로 설정되므로 /dev/null
연결이 닫힐 때까지 기다리지 않고 EOF를 보낸 후 netcat이 즉시 종료됩니다. netcat -d
(stdin을 기다리지 마세요) 버그가 있나요? macOS 및 hot에서 이는 이 솔루션이 실제로 합리적인 간격으로 폴링하는 것보다 더 나쁘다는 것을 의미합니다.
나는 이 문제에 대한 해결책을 가지고 있습니다. 표준 입력을 파이프에 연결하는 것입니다. 그러나 나는 순수한 호기심 때문에 이 문제에 특히 관심이 있습니다.
답변1
불행히도 SSH를 통해 명령을 실행할 때 연결이 닫힐 때까지 기다리지 않고 전송 후 즉시 종료
stdin
되도록 설정되어 있습니다/dev/null
.netcat
EOF
버전 4 에서는 파이프를 통해 상위 프로세스에 연결하고 항상 열려 있지만 비어 있는 프로세스에서 데이터를 읽는 bash
공동 프로세스를 만들 수 있습니다 . 이 방법은 정리가 필요하지 않습니다.read
stdout
예:
coproc read # Never writes anything into its stdout.
netcat localhost 12345 <&${COPROC[0]} # Read from co-process' stdout.
또 다른 방법은 long stdin
에서 stdout
파이프하는 것입니다 sleep
.
sleep 365d | netcat localhost 12345
답변2
사용할 수 있습니다 cryptsetup
(또는 dmsetup
하나 만들 수도 있습니다).
# truncate -s 8M luksblock.img
# cryptsetup luksFormat luksblock.img
# cryptsetup luksOpen luksblock.img luksblock
# cryptsetup luksSuspend luksblock
# cat /dev/mapper/luksblock
( ... no output because it's blocked / suspended ... )
그것은 어떻게 생겼는지 dmsetup
:
# dmsetup info luksblock
Name: luksblock
State: SUSPENDED
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 71
Number of targets: 1
UUID: CRYPT-LUKS1-87bc6d9fd7fa419bbf15425c062d0916-luksblock
일시 중지 장치를 사용할 수 있습니다 dmsetup
.
dmsetup suspend luksblock
따라서 파일 지원이 필요하지 않은 보류 중인 장치 매핑을 생성하는 것이 가능해야 luksblock.img
하지만 마지막 부분은 여러분에게 맡기겠습니다. :-피
물론 이 접근법에는 큰 단점이 있습니다. 장치는 의 다른 모든 블록 장치 사이에 나열되며 /proc/partitions
장치를 모니터링하거나 감지하는 모든 항목(예: 새 물리 볼륨을 찾는 LVM)도 읽기를 시도하여 해당 블록에 갇히게 됩니다. 이렇게 하면 장치가 감지되지 않고(이 작업을 수행하는 프로세스가 중단되기 때문에) 컴퓨터가 다시 시작되지 않을 수도 있습니다(종료 프로세스를 처리하는 프로세스가 중단되기 때문에).