2011-11-21 63 views
1

我使用的系统()在Linux上推出了Evince决不返回,直到我打开一个文件,并试图关闭它工作正常。当我尝试关闭文件系统()永远不会返回:系统()用了Evince

我的代码:

char systemString[MAXPATHLEN]; 
sprintf(systemString, "%s", "evince"); 

int ret = system(systemString); 
if (ret == -1) 
{ 
    perror("system"); 
    exit(1); 
} 

任何想法,为什么?如果没有,我怎么调试这个,当它在调试器中使用它永远不会返回它。该代码是相当大,一些信号被阻止,但我尝试了一些我认为这使用和相同的错误。

谢谢

+1

当你从一个shell打开了Evince,它返回? –

+1

如果你从'sh'终端启动'evince'你会遇到同样的问题吗?你有一些错误信息吗? –

+0

不,只从程序内部,从cmd行sh就好了。我跑到另一个程序,以类似的方式启动了Evince,它有没有问题,但其较小的项目,它的东西,我的代码,但我不知道它是什么。如果它在此之前或之后造成它。 –

回答

0

我发现它,因为SIGTERM被阻止,但程序。这是一个大型的传统计划。

+0

您是否尝试过系统“表示出&");?这将导致subshel​​甚至之前了Evince退出或teminates在后台运行,并返回到调用者了Evince。 – wildplasser

+0

谢谢,我想,但我发现有代码阻塞信号的全断面它不应该有,它解决了这个问题。 –

+0

“它不应该有的代码阻塞信号部分”:语法错误。 – wildplasser