我有一个脚本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
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)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。