开发者社区> 问答> 正文

Popen上的C segfaults [关闭]

我有一个脚本agent.sh,它是使用C从我的C程序中调用的popen。但是,当脚本popen第二次遇到该调用时,它将因分段错误而崩溃。

代码(in->agent是,char *其中包含的参数agent.sh):

char buf[15 + strlen(in->agent)];
sprintf(buf, "./agent.sh \"%s\"", in->agent);
FILE *pipe;
pipe = popen(buf, "r");

读取操作(未尝试写入)之后,使用封闭管道pclose。Agent.sh只会执行一些小的检查并向传回一个值stdout。该值将与fgets另一个字符数组一起读取并存储在其中,以进行进一步处理。

使用时gdb,它为我提供了以下堆栈跟踪:

#0  0x00007ffff7e4cf5f in unlink_chunk.isra () from /usr/lib/libc.so.6
#1  0x00007ffff7e4fc31 in _int_malloc () from /usr/lib/libc.so.6
#2  0x00007ffff7e50e84 in malloc () from /usr/lib/libc.so.6
#3  0x00007ffff7eb46a2 in __posix_spawn_file_actions_realloc () from /usr/lib/libc.so.6
#4  0x00007ffff7eb48e0 in posix_spawn_file_actions_adddup2 () from /usr/lib/libc.so.6
#5  0x00007ffff7e3ccf5 in _IO_proc_open@@GLIBC_2.2.5 () from /usr/lib/libc.so.6
#6  0x00007ffff7e3d03f in popen@@GLIBC_2.2.5 () from /usr/lib/libc.so.6

展开
收起
几许相思几点泪 2019-12-23 22:06:54 13159 0
1 条回答
写回答
取消 提交回答
  • import os import time import subprocess import signal

    try: mProcess = subprocess.Popen('monkeyrunner test.py emulator-5554') except: print 'error'

    time.sleep(3)

    try: #mProcess.send_signal(signal.CTRL_C_EVENT) #mProcess.send_signal(signal.CTRL_BREAK_EVENT ) mProcess.terminate() pass except: print 'error'

    print 'you are finished'

    time.sleep(4)

    2021-02-26 14:44:39
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
How to Build a Successful Data 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载