如何发送Ctrl-C控制字符或终端挂机消息到子进程?
发布时间:2020-12-16 06:04:44 所属栏目:百科 来源:网络整理
导读:我有一个运行在伪终端的子进程.父进程不以root身份运行,但子进程通过su或sudo运行.因此,不可能向子进程发送一个信号来强制它退出.我想强迫它退出这些手段之一: 模拟Ctrl-C. 模拟终端挂机. 我该如何做这些?我已经有一个主人fd,我已经尝试过这样的事情: wri
我有一个运行在伪终端的子进程.父进程不以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下划分一个进程,它运行无限循环打印 这导致以下输出: 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次,并退出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |