두 번째 셸에서 실행 중인 프로세스의 "stdin"에 명령을 제공하려면 어떻게 해야 합니까?

두 번째 셸에서 실행 중인 프로세스의 "stdin"에 명령을 제공하려면 어떻게 해야 합니까?

범위에서 사용자 입력을 기다리는 프로세스가 있는 경우 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

관련 정보