如何发送Ctrl-C控制字符或终端挂机消息到子进程?

前端之家收集整理的这篇文章主要介绍了如何发送Ctrl-C控制字符或终端挂机消息到子进程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个运行在伪终端的子进程.父进程不以root身份运行,但子进程通过su或sudo运行.因此,不可能向子进程发送一个信号来强制它退出.我想强迫它退出这些手段之一:

>模拟Ctrl-C.
>模拟终端挂机.

我该如何做这些?我已经有一个主人fd,我已经尝试过这样的事情:

write(master,&termios.c_cc[VINTR],1)

但它没有做任何事情.

解决方法

在我看来,如果你真的有一个pty(除非你的意思是伪终端),那么你所要做的就是将Control-C发送到该FD.作为这一点的证据,我在Python中提交了以下代码(但是相当接近C所需的代码):
import pty,os,sys,time

pid,fd = pty.fork()
if pid == 0:
   os.execv('/bin/sh',['/bin/sh','-c','while true; do date; sleep 1; done'])
   sys.exit(0)
time.sleep(3)
os.write(fd,'^C')
print 'results:',os.read(fd,1024)

这在一个pty下划分一个进程,它运行无限循环打印
日期.然后父母等待3秒钟并发送控件C.

这导致以下输出

guin:/tmp$time python /tmp/foo
results: Fri Feb  5 08:28:09 MST 2010
Fri Feb  5 08:28:10 MST 2010
Fri Feb  5 08:28:11 MST 2010

python /tmp/foo  0.02s user 0.01s system 1% cpu 3.042 total
guin:/tmp$

运行时间只有3秒钟,打印日期3次,并退出.

猜你在找的C&C++相关文章