Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python subprocess.Popen挂起_Python_Subprocess_Freeze - Fatal编程技术网

Python subprocess.Popen挂起

Python subprocess.Popen挂起,python,subprocess,freeze,Python,Subprocess,Freeze,我查看了之前提出的问题,没有发现类似的问题。我错过了一个,请让我知道,我很抱歉再次问同样的问题 我正在调试一个问题,在执行以下代码(Python2.6)时出现了Popen挂起: 如果改用“调用”阻塞方法,也会发生这种情况。此问题目前仅在此节点上发生。它运行Suse SLES 11 SP1 故障节点上的strace显示以下内容: <snip> fstat(5, {st_mode=S_IFREG|0644, st_size=22808, ...}) = 0 open("/usr/lib6

我查看了之前提出的问题,没有发现类似的问题。我错过了一个,请让我知道,我很抱歉再次问同样的问题

我正在调试一个问题,在执行以下代码(Python2.6)时出现了Popen挂起:

如果改用“调用”阻塞方法,也会发生这种情况。此问题目前仅在此节点上发生。它运行Suse SLES 11 SP1

故障节点上的strace显示以下内容:

<snip>
fstat(5, {st_mode=S_IFREG|0644, st_size=22808, ...}) = 0
open("/usr/lib64/python2.6/lib-dynload/cStringIO.so", O_RDONLY) = 6
read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\34\0\0\0\0\0\0"..., 832) =832
fstat(6, {st_mode=S_IFREG|0644, st_size=22808, ...}) = 0
mmap(NULL, 2117912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 6, 0) = 0x7f0cd5987000
fadvise64(6, 0, 2117912, POSIX_FADV_WILLNEED) = 0
mprotect(0x7f0cd598b000, 2093056, PROT_NONE) = 0
mmap(0x7f0cd5b8a000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 6, 0x3000) = 0x7f0cd5b8a000
close(6)                                = 0
mprotect(0x7f0cd5b8a000, 4096, PROT_READ) = 0
close(5)                                = 0
close(4)                                = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
close(3)                                = 0
pipe([3, 4])                            = 0
pipe([5, 6])                            = 0
fcntl(6, F_GETFD)                       = 0
fcntl(6, F_SETFD, FD_CLOEXEC)           = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f0cd793e9d0) = 27688
close(6)                                = 0
close(4)                                = 0
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0cd5886000
read(5, "", 1048576)                    = 0
mremap(0x7f0cd5886000, 1052672, 4096, MREMAP_MAYMOVE) = 0x7f0cd5886000
close(5)                                = 0
munmap(0x7f0cd5886000, 4096)            = 0
fcntl(3, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0cd794a000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
munmap(0x7f0cd794a000, 4096)            = 0
wait4(27688,
下面是另一个节点上的输出,该代码在该节点上工作:

<snip>
fstat(5, {st_mode=S_IFREG|0644, st_size=22808, ...}) = 0
open("/usr/lib64/python2.6/lib-dynload/cStringIO.so", O_RDONLY) = 6
read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\34\0\0\0\0\0\0"..., 832) = 832
fstat(6, {st_mode=S_IFREG|0644, st_size=22808, ...}) = 0
mmap(NULL, 2117912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 6, 0) = 0x7f57b3833000
fadvise64(6, 0, 2117912, POSIX_FADV_WILLNEED) = 0
mprotect(0x7f57b3837000, 2093056, PROT_NONE) = 0
mmap(0x7f57b3a36000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 6, 0x3000) = 0x7f57b3a36000
close(6)                                = 0
mprotect(0x7f57b3a36000, 4096, PROT_READ) = 0
close(5)                                = 0
close(4)                                = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
close(3)                                = 0
pipe([3, 4])                            = 0
pipe([5, 6])                            = 0
fcntl(6, F_GETFD)                       = 0
fcntl(6, F_SETFD, FD_CLOEXEC)           = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f57b57ea9d0) = 32277
close(6)                                = 0
close(4)                                = 0
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f57b3732000
read(5, "", 1048576)                    = 0
mremap(0x7f57b3732000, 1052672, 4096, MREMAP_MAYMOVE) = 0x7f57b3732000
close(5)                                = 0
munmap(0x7f57b3732000, 4096)            = 0
fcntl(3, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f57b57f6000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
munmap(0x7f57b57f6000, 4096)            = 0
wait4(32277, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 32277
--- SIGCHLD (Child exited) @ 0 (0) ---
close(3)                                = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f57b50386a0}, {0x7f57b52d88f8, [], SA_RESTORER, 0x7f57b50386a0}, 8) = 0
exit_group(0)                           = ?

fstat(5,{st_mode=S_IFREG | 0644,st_size=22808,…})=0
打开(“/usr/lib64/python2.6/lib dynload/cStringIO.so”,O_RDONLY)=6
读(6),“\177ELF\2\1\1\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\34\0\0\0\0\0\0\0\0”…,832)=832
fstat(6,{st_mode=S_IFREG | 0644,st_size=22808,…})=0
mmap(NULL,2117912,保护读取,保护执行,映射私有,映射DENYWRITE,6,0)=0x7F57B383000
fadvise64(6,0,2117912,POSIX_FADV_WILLNEED)=0
M保护(0x7f57b3837000、2093056、无保护)=0
mmap(0x7F57B3A3600012288,保护读写,映射私有,映射固定,映射DENYWRITE,6,0x3000)=0x7F57B3A336000
关闭(6)=0
mprotect(0x7F57B3A360004096,保护读取)=0
关闭(5)=0
关闭(4)=0
getrlimit(RLIMIT_NOFILE,{rlim_cur=1024,rlim_max=1024})=0
关闭(3)=0
管道([3,4])=0
管道([5,6])=0
fcntl(6,F_GETFD)=0
fcntl(6,F_SETFD,FD_CLOEXEC)=0
克隆(child_stack=0,flags=clone_child_CLEARTID | clone_child_SETTID | SIGCHLD,child_tidptr=0x7f57bea9d0)=32277
关闭(6)=0
关闭(4)=0
mmap(NULL,1052672,保护读写,映射私有,映射匿名,-1,0)=0x7F57B373000
读(5,“,1048576)=0
mremap(0x7f57b3732000、1052672、4096,mremap_MAYMOVE)=0x7f57b3732000
关闭(5)=0
munmap(0x7f57b3732000,4096)=0
fcntl(3,F_GETFL)=0(仅限标志)
fstat(3,{st_mode=S_iffo | 0600,st_size=0,…})=0
mmap(NULL,4096,保护读取|保护写入,映射私有|映射匿名,-1,0)=0x7F57B6000
lseek(3,0,SEEK_CUR)=-1 ESPIPE(非法SEEK)
fstat(3,{st_mode=S_iffo | 0600,st_size=0,…})=0
munmap(0x7f57b57f6000,4096)=0
wait4(32277,[{WIFEXITED(s)和&WEXITSTATUS(s)==0}],0,NULL)=32277
---SIGCHLD(孩子退出)@0(0)---
关闭(3)=0
rt_sigaction(SIGINT,{SIG_DFL,[],SA_RESTORER,0x7f57b50386a0},{0x7f57b52d88f8,[],SA_RESTORER,0x7f57b50386a0},8)=0
退出组(0)=?
我想不出这个节点出了什么问题?为什么这个命令挂在第一个节点上而不是第二个节点上(运行完全相同的OS和python版本)

任何帮助都将不胜感激

提前谢谢大家,

D


另外,如果有人想要任何一个节点的完整strace输出,请让我知道。我只允许让这台机器保持这种状态直到星期一:-(

使用
子进程调用(…stdout=PIPE)是错误的。
这将把stdout重定向到一个管道,但是当前进程没有读取这个管道,因此子进程在输出超过N字节的数据后将阻塞(N字节取决于操作系统)


您需要的是
子进程。请检查输出()

以下是有关上述挂起进程(27688)的一些额外数据:root#l/proc/27688/fd total 0 dr-x------2 root root 0 Dec 6 15:38./dr-xr-xr-x7 root 0 Dec 6 15:34../lrwx------1 root 64 Dec 6 16:00 0->/dev/pts/2 l-wx------1 root 64 Dec 6 16:00 1管道:[5852827]l-wx------1根根64 Dec 6 15:38 2->管道:[5852827]lr-x-----1 root root 64 Dec 6 16:00 255->/sbin/service*我在使用子进程启动守护进程时看到了相同的情况,但并非所有的守护进程都会出现这种情况。我猜想,派生守护进程的进程没有正确结束或没有关闭其stdout/stderr。很抱歉,我的原始代码造成了混淆(在我尝试使用另一个调用之前)如下:\\感谢您的回复。很抱歉造成混淆。我的原始代码(在我尝试使用另一个调用之前)如下(使用相同的命令cmd,即“service drbd start”):
p=subprocess.Popen(cmd.split(),stdout=subprocess.PIPE,stderr=subprocess.stdout)res=p.communicate()
此命令挂起(我还尝试使用subprocess.PIPE for stderr获得相同的结果)。直接在shell中运行时,它返回以下内容:
启动DRBD资源:[].
请注意,如果我用
ls-l
替换命令,它就可以正常工作。更有趣的是,如果我使用以下命令
service drbd status
甚至
service drbd stop
这些命令也可以工作。运行“service drbd start”有什么特别之处?我使用的是python 2.6。没有
check_output()
子流程模块中的函数。
p.communicate()
版本看起来不错(这也是
检查输出()
内部所做的)。我不知道
服务drbd启动的特殊之处,抱歉。。。
root     27688 27659  0 15:34 pts/2    00:00:00 /bin/sh /sbin/service drbd start
root     27690 27688  0 15:34 pts/2    00:00:00 /bin/bash /etc/init.d/drbd start
<snip>
fstat(5, {st_mode=S_IFREG|0644, st_size=22808, ...}) = 0
open("/usr/lib64/python2.6/lib-dynload/cStringIO.so", O_RDONLY) = 6
read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\34\0\0\0\0\0\0"..., 832) = 832
fstat(6, {st_mode=S_IFREG|0644, st_size=22808, ...}) = 0
mmap(NULL, 2117912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 6, 0) = 0x7f57b3833000
fadvise64(6, 0, 2117912, POSIX_FADV_WILLNEED) = 0
mprotect(0x7f57b3837000, 2093056, PROT_NONE) = 0
mmap(0x7f57b3a36000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 6, 0x3000) = 0x7f57b3a36000
close(6)                                = 0
mprotect(0x7f57b3a36000, 4096, PROT_READ) = 0
close(5)                                = 0
close(4)                                = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
close(3)                                = 0
pipe([3, 4])                            = 0
pipe([5, 6])                            = 0
fcntl(6, F_GETFD)                       = 0
fcntl(6, F_SETFD, FD_CLOEXEC)           = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f57b57ea9d0) = 32277
close(6)                                = 0
close(4)                                = 0
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f57b3732000
read(5, "", 1048576)                    = 0
mremap(0x7f57b3732000, 1052672, 4096, MREMAP_MAYMOVE) = 0x7f57b3732000
close(5)                                = 0
munmap(0x7f57b3732000, 4096)            = 0
fcntl(3, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f57b57f6000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
munmap(0x7f57b57f6000, 4096)            = 0
wait4(32277, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 32277
--- SIGCHLD (Child exited) @ 0 (0) ---
close(3)                                = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f57b50386a0}, {0x7f57b52d88f8, [], SA_RESTORER, 0x7f57b50386a0}, 8) = 0
exit_group(0)                           = ?