범위에서 사용자 입력을 기다리는 프로세스가 있는 경우 stdin
두 번째 터미널에서 해당 사용자 입력을 어떻게 제공합니까?
특히 c 프로그램을 실행하면
while(1){
fgets(string, len, stdin);
string[strlen(string)-1] = 0;
if(strcmp("Stop", string) == 0){
printf("Gotcha");
return 1;
}
}
그렇다면 이 프로세스에 다른 프로세스의 "Stop" 문자열을 공급하여 stdin
첫 번째 프로세스가 중지되고 "Gotcha"가 인쇄되도록 하려면 어떻게 해야 할까요?
터미널 "pts/0"에서 c 프로그램을 실행하고 다음 명령을 사용하여 새 터미널("pts/1")을 열었습니다.
$ echo "Stop" > /proc/<pid>/fd/0
$ echo "Stop" > /dev/pts/0
여기서 pid는 프로세스 ID입니다. "stop" 명령은 첫 번째 셸에서 "반복"되지만 프로세스는 이를 수신하지 않습니다.
답변1
명명된 파이프를 만들고 C 프로그램에서 이를 읽도록 합니다.
$ mkfifo input
$ ./prog <input
다른 쉘 세션에서:
$ echo Stop >/path/to/input
답변2
C 프로그램을 시작하기 전에 stdin을 식별한 다음 해당 장치에 씁니다.
$ tty
/dev/pts/2
$ ./prog
그런 다음 다른 터미널(등)에서
$ echo Stop > /dev/pts/2