1

我正在尝试在 Boost UTF 全局装置中检查正在运行的服务器进程。我正在像这样在我的夹具构造函数中调用系统来执行此操作...

class MyTestFixture
{
public: 
    MyTestFixture(); 
    ~MyTestFixture() ;

};


MyTestFixture::MyTestFixture()
{

    int rc = system("pidof myserver > /dev/null");
    if ( rc != 0 )
    {
        cout << "myserver not running so cannot continue" << endl;
        fflush (stdout) ;
        sleep(10);
        exit(4) ;
    }

    cout << "fixture setup ok!" << endl ;
}

BOOST_GLOBAL_FIXTURE( MyTestFixture );


BOOST_AUTO_TEST_CASE( pgmiia_main_test1 )
{
// some test code...
}

当“myserver”运行正常时,一切都很好,但是当它不是时,我会崩溃。它不会进入 if 部分并退出。奇怪的是,如果我在 gdb 中运行它而 myserver 没有运行,它确实会像我预期的那样进入我的退出分支。

我对 Boost UTF 有点陌生。我正在使用动态链接执行此操作。有任何想法吗?

乔恩

4

1 回答 1

1

据我记得,如果没有运行,pidof -s 'proc_name'则返回 0 ,否则返回 PID。proc_name由于system应该返回被调用进程的 retval,因此您实际上是在测试进程是否正在运行:rc != 0,而rc == 0测试进程是否未运行。不确定问题是否与 Boost 细节有关。

于 2012-07-05T11:58:26.273 回答