gpt4 book ai didi

c - 将传输结束写入正在运行的进程的标准输入

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:23 25 4
gpt4 key购买 nike

我有一个多线程进程等待来自标准输入的输入干净地关闭:

//launch worker threads

fgetc(stdin);
run = 0;

//let threads shut down cleanly

在我启动进程的终端上,我只需按下 ENTER 键,进程就会结束。

但是,如果我尝试通过以下方式从另一个终端写入该进程的标准输入

$ echo "\r" > /proc/<PID>/fd/0

\r 会出现在运行进程的终端屏幕上,但进程仍然挂起

fgetc(stdin);

然后我尝试发送传输结束符

$echo "\x04" > /proc/<PID>/fd/0

没有运气——我做错了什么?

最佳答案

/proc/<PID>/fd/0是进程的标准输入所连接的终端的符号链接(symbolic link)。例如,ls -l可能会显示 /proc/<PID>/fd/0 -> /dev/pts/9 .

尝试写入该链接并不意味着您将写入进程的标准输入;这意味着您将写入该进程正在读取的任何终端。您的 echo 命令相当于 echo "\r" > /dev/pts/9 .

(顺便说一句,你需要写 echo -e "\r"echo $'\r' 来写一个回车符。同样在 UNIX 上,行尾由 \n 分隔而不是 \r 。你实际上可以只写echo 输出一个换行符,因为它会自动附加一个。)

我建议寻找一种不同的方式来指示您的进程退出。最简单的方法是让它监听 SIGTERM (由 kill <PID> 发送)或 SIGINT (由 Ctrl-C 发送)并在发出信号时自行关闭。

关于c - 将传输结束写入正在运行的进程的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30669964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com