![두 번째 셸에서 실행 중인 프로세스의 "stdin"에 명령을 제공하려면 어떻게 해야 합니까?](https://linux55.com/image/145008/%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EC%85%B8%EC%97%90%EC%84%9C%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20%22stdin%22%EC%97%90%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%A0%9C%EA%B3%B5%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
범위에서 사용자 입력을 기다리는 프로세스가 있는 경우 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