私は以下のC
プログラムを持っています。Golangからコンソール入力をサブプロセスに渡す方法
#include<stdio.h>
int main() {
int i = 0;
char ch;
printf("Starting test application\n");
for (i=0; i<10; i++) {
ch = getchar();
printf("character at %d = %d\n", i, ch);
}
return 0;
}
私はGo
の言語からサブプロセスとしてこのプログラムを実行したいです。私のGo
コードでは、私はプログラムへの入力として使用したいbyte
配列を持っています。私は次のアプローチを試したが、うまくいかなかった。
cmd := exec.Command("/home/dodtech/go-workspace/MachineListener/Test")
cmd.Stdout = os.Stdout
err := cmd.Start()
if err == nil {
var ctrlc [9]byte
ctrlc[0] = 0x00
ctrlc[1] = 0x01
ctrlc[2] = 0x02
ctrlc[3] = 0x03
ctrlc[4] = 0x04
ctrlc[5] = 0x05
ctrlc[6] = 0x06
ctrlc[7] = 0x07
ctrlc[8] = 0x08
ctrlc[9] = 0x09
cmd.Stdin = bytes.NewReader(ctrlc[0:])
cmd.Stdin.Read(ctrlc[0:])
}
上記の両方のプログラムは単なるテストプログラムであり、私が達成したいことを表しています。それらは効率的なものではなく、プログラミングガイドライン(バイト配列の作成方法など)に従って書かれていません。私がこの小さなケースで私の問題を解決できるなら、私はそれを私の実際のソフトウェアコードに移植することができます。どのように私はこれを行うことができます誰も私を導くことができれば感謝します。
上記の手法を使ってサブプロセスにCTRL + Cイベントをどのように送ることができますか?私はサブプロセスとしてNtTraceを実行しています。 NtTraceはシステムコールトレーシングツールであり、私が望んでいないターゲットプロセスを殺すので、それを殺すことはできません。 CTRL + CイベントをNtTraceサブプロセスに渡すことができれば、正常にターゲットプロセスを解放して終了します。 – azizulhakim
cmd.Processを使用してターゲットプロセスを取得し、https://golang.org/pkg/os/#Process.Signalを使用してプロセスに通知できます。それでも問題がなければ、より多くの文脈で別の質問を投稿することができます。 – eugenioy