如何从第二个 shell 向正在运行的进程的“stdin”提供命令?

如何从第二个 shell 向正在运行的进程的“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。 “停止”命令在第一个 shell 中“重复”,但进程没有收到它。

答案1

创建一个命名管道并让您的 C 程序从中读取:

$ mkfifo input
$ ./prog <input

在另一个 shell 会话中:

$ echo Stop >/path/to/input

答案2

在启动c程序之前识别stdin,然后写入该设备

$ tty
/dev/pts/2
$ ./prog

然后在另一个终端(等等)

$ echo Stop > /dev/pts/2

相关内容