首页 > 编程知识 正文

linux查看某个进程,linux是实时系统吗

时间:2023-05-04 06:27:13 阅读:28142 作者:4024

QScopedPointer m_Process;

m_process.reset(newqprocess ) this );

连接(m _ process.data (,signal ) readyreadstandardoutput )、this、slot )、onreadyread );

连接(m _ process.data (,signal ) finished )、this、slot (on finished ) ) )

m _ process-setreadchannel (qprocess 33603360标准输出;

m _ process-setworkingdirectory (qcoreapplication 33603360应用程序地址);

m_process-start(XXX.exe );

m_process-waitforfinished(-1;

qtringoutput=m _ process-readallstandardoutput (;

void my thread :3360 onreadyread (

{

char buffer[1024];

while(1)。

{

intret=m _ process-readline (buffer,1024 );

if(ret==0||ret==-1 ) () ) ) ) ) ) )

布雷克;

}

}

void my thread :3360 on finished (

{

m_Process.disConnectAll (;

}

QScopedPointer m_Process;

m_process.reset(newqprocess ) this );

连接(m _ process.data (,signal ) readyreadstandardoutput )、this,slot ) onreadyread ) );

连接(m _ process.data (,signal ) finished )、this、slot (on finished ) ) )

m _ process-setreadchannel (qprocess 33603360标准输出;

m _ process-setworkingdirectory (qcoreapplication 33603360应用程序地址);

m_process-start(XXX.exe );

m_process-waitforfinished(-1;

void my thread :3360 onreadyread (

{

qtringoutput=m _ process-readallstandardoutput (;

}

void my thread :3360 on finished (

{

m_Process.disConnectAll (;

}

第一种方法是在onReadyRead消息中逐行读取输出信息,并在过程结束后在readAllStandardOutput中读取其馀的数据。

但是,反复执行程序时崩溃并结束,错误信息如下

assert : ' bytes=buffer size ' infile toolsqringbuffer.CPP,line 74

测试结果显示,如果先接收到finish消息,然后运行readAllStandardOutput,则会报告错误。 如果不添加readAllStandardOutput,则无法完全读取进程输出。 我试着用了变量。 互斥锁定,信号量无法解决。 因为finish消息的到来是随机的。

将readAllStandardOutput放入finish消息中时,也可能会崩溃。 然后看不到崩溃信息。

最后,我们发现在finished等待之后加上100毫秒的延迟就可以了。 q thread :3360毫秒(100 )。

第二种方法是在onReadyRead消息中直接读取所有输出数据,经过测试,完全读取数据,避免崩溃。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。