2017-02-01 18 views
1

자식 프로세스를 생성하려고했습니다. vvp (https://linux.die.net/man/1/vvp). 특정 시간에 CTRL + C을 보내야합니다. 시뮬레이션이 중단되어 대화 형 프롬프트가 표시 될 것으로 예상됩니다. 그 후 자식 프로세스에 명령을 보내 시뮬레이션을 계속할 수 있습니다. 그래서,이 같은 시도 :Node.js의 하위 프로세스에 "CTRL + C"를 보내는 방법은 무엇입니까?

var child = require('child_process'); 
var fs = require('fs'); 
var vcdGen = child.spawn('vvp', ['qqq'], {}); 

vcdGen.stdout.on('data', function(data) { 
    console.log(data.toString()) 
}); 

setTimeout(function() { 
    vcdGen.kill('SIGINT'); 
}, 400); 

이 경우를, 자식 프로세스가 중지되었습니다. vcdGen.kill('SIGINT'); 대신 vcdGen.stdin.write('\x03')을 시도했지만 작동하지 않습니다.

은 아마는 Windows의입니까? cmd와 동일한 동작을 수행 할 수있는 방법이 있습니까?

+0

Windows 태그 (질문에 중요)를 추가 했으므로 cmd가 필요하지 않습니다. (스폰는 하위 프로세스보다 더 구체적입니다) – Richard

+0

@Richard cmd가 전혀 관련이 없다는 것은 말할 필요도 없습니다. 단지 명령 프로세서 일 뿐이며 콘솔 서브 시스템과는 아무런 관련이 없습니다 (다른 콘솔 어플리케이션과는 별도 임). – Luaan

답변

2

kill는 정말 Windows에서 무례 프로세스 죽이기 지원 - Windows에서 응용 프로그램 신호 모델을하고 * nix에서 스크립트는 호환되지 않습니다. Ctrl+C을 표준 입력으로 전달할 수 없습니다. 표준 입력을 통해 전달되지 않기 때문에 콘솔 하위 시스템의 기능입니다. 따라서 프로세스에 연결된 콘솔이있는 경우에만 사용할 수 있습니다. 자식 프로세스에 새 스레드를 만들어 작업을 수행합니다.

프로그래밍이 작업을 수행하는 지원되는 방법은 없습니다. 그것은 사용자가 아닌 응용 프로그램을위한 기능입니다. 이 작업을 수행하는 유일한 방법은 콘솔 하위 시스템이 수행하는 것과 동일한 작업을 수행하는 것입니다. 대상 응용 프로그램에 새 스레드를 만들어 신호를 보냅니다. 그러나 가장 좋은 방법은 간단히 대신 co-perative 신호를 사용하는 것입니다. 물론 신호를 이해하려면 대상 응용 프로그램을 변경해야합니다.

당신이 완전히 지원되지 않는 경로를 이동하려면

https://stackoverflow.com/a/1179124/3032289를 보라.

중간계를 찾으려면 자신에게 신호를 보내려면, 물론 있습니다. 또한 콘솔이 연결된 경우 Ctrl + C를 프로세스로 보낼 수 있음을 의미합니다. 말할 필요도없이이 작업은 매우 까다 롭습니다. 콘솔을 만들고 실행할 실제 프로그램을 실행하는 원시 호스트 프로세스를 만들고 싶을 것입니다. 호스트 프로세스는 이벤트를 수신하고 이벤트가 신호를 받으면 GenerateConsoleCtrlEvent으로 전화하십시오.