질문이 있습니다. 몇 시간에 한 번씩 문제가 발생하는 명령 줄에서 프로세스를 실행하고 있습니다. 내가 문제를 조사하고있는 동안, 나는 STOUT을 특정 문자열/정규 표현식에 대해 모니터하고 죽이고, 그것이 깨 졌음을 나타내는 것을 출력한다면 프로세스를 다시 시작하고 싶다.STDOUT이 내가 원하는 것으로 변경되면 명령 줄 프로세스를 종료하고 다시 시작 하시겠습니까?
나는 내 자신의 파이썬/루비 스크립트를 롤링하여 바닐라 방식으로 할 수 있지만, 좀 더 깨끗하게 만들 수있는 멋진 도구가 있는지 궁금한가요? 이것은 Windows에 있지만 대답은 유닉스 명령 줄 프로세스가 관련된 경우 cygwin 있습니다.
좋은 생각,하지만 당신은 그 접근 방식 버퍼링 문제로 실행 가능성이있어, 'grep'은 이름이 붙은 파이프 또는 다른 파이프로 보내지는데, 전체 버퍼 나 EOF가 생길 때까지 출력을 생성하지 않습니다. 두 번째 것은 전혀 작동하지 않습니다. 심지어 프로그램이 충돌 할 때까지 프로그램을 시작하지 않을 것입니다. 심지어 버퍼링을 제쳐 두어도 ... –
버퍼링에 대해 확신합니까? 파이프에 stdout이 쓰여지는 경우 각 줄 바꿈과 함께 플러시되어야합니다. 두 번째 부러진 것이 맞습니다. 처음 시작할 때조차도 안됩니다 ... 지금 고쳐 봤습니다. 결론적으로, 쉘은이 문제에 대한 끔찍한 도구이며, 파이썬이나 루비를 사용하십시오. – vipw
예, stdout은 기본적으로 _not_ 라인 버퍼입니다 (std :: err은 기본적으로 버퍼링되지 않습니다). stdout은 일반적으로 요청에 따라 플러시되거나 stdin에 대한 첫 번째 폴링에서 플러시됩니다. 많은 언어의 프리미티브는 자동으로 라인 끝 부분에 명시적인 플러시를 포함합니다. – sehe