stackoverflow을 보면 가끔
CreatePipe로 pipe를 생성하고,
CreateProcess에다가 해당 Pipe를 넣어서,
stderr/stdout을 PeekNamedPipe로 데이터가 있는지 확인한다.
대충 해보면 작동하는거 같다..
하지만 모든 상황에 작동하는것은 아니다.
https://docs.microsoft.com/en-us/windows/win32/api/namedpipeapi/nf-namedpipeapi-peeknamedpipe
마소님... CreatePipe에서도 동작한다며...ㅠㅠ
일단...
ipconfig같은 명령의 경우 잘 동작하는듯 하다.
하지만 bcdedit 같은 명령의 경우 PeekNamedPipe는 성공하지만 total_bytes_avail 등 모든 출력 결과는 0 을 나타낸다.
생각한 대안으로써 WaitForSingleObject가 있을 수 있지만... Pipe에서는 동작하지 않는다. (항상 WAIT_OBJECT_0 을 반환한다.)
이래...저래... NamedPipe를 만들어서 주는것말고는 답이 없다...!!!!
========== 추가 ==========
Named Pipe를 써도 특정 상황에서 stdout/stderr 값을 못받아올때가 있다.
hProcess의 이벤트가 빨리 먹혀서 그런데 꼼수로 해결했다.
https://github.com/jc-lab/jcu-process
반응형
'개발 및 운영' 카테고리의 다른 글
postfix Received 헤더 삭제 (0) | 2020.08.21 |
---|---|
BCD 11000001 (device) Element binary 구조 (0) | 2020.08.07 |
MariaDB & Ceph & Galera 성능 테스트 (0) | 2020.05.27 |
BTRFS 복구 (0) | 2019.11.22 |
Error: Cannot find module 'electron' 문제발생시 (0) | 2019.11.01 |
댓글