加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何发送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下划分一个进程,它运行无限循环打印
日期.然后父母等待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次,并退出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读