linux下,需要子进程启动别的进程跟父进程通信,如何实现?
需求:写一个服务器A,通过配置启动N个进程B,需要进程A跟进程B通信,进程B如果异常退出,进程A可以启动进程B。。
windows下已经实现了,linux下如果实现呢?
进程B的写:cout
进程B的读:getline
如何跟B进行通信呢,在B不修改的情况下
伪码:
bool CProcess::Execute(const string& Command)
{
bool bRet = true;
m_pid = -1;
int pipeFDs[2];
if (pipe(pipeFDs) < 0)
{
LOG_ERROR << "pipe err!!" << endl;
}
m_pid = fork();
if (m_pid == 0)
{
LOG_DEBUG << "child process :" << Command.c_str() << endl;
//子进程
if (execl(Command.c_str(), "test", NULL) < 0)
{
LOG_ERROR << "execl faild!!" << endl;
}
exit(0);
}
else if (m_pid == -1)
{
//出错
LOG_ERROR << "fork err!!" << endl;
}
else
{
m_hPipes[Read] = pipeFDs[Read];
m_hPipes[Write] = pipeFDs[Write];
//父进程
LOG_DEBUG << "parent process" << endl;
}
return bRet;
}
windows下已经实现了,linux下如果实现呢?
进程B的写:cout
进程B的读:getline
如何跟B进行通信呢,在B不修改的情况下
伪码:
bool CProcess::Execute(const string& Command)
{
bool bRet = true;
m_pid = -1;
int pipeFDs[2];
if (pipe(pipeFDs) < 0)
{
LOG_ERROR << "pipe err!!" << endl;
}
m_pid = fork();
if (m_pid == 0)
{
LOG_DEBUG << "child process :" << Command.c_str() << endl;
//子进程
if (execl(Command.c_str(), "test", NULL) < 0)
{
LOG_ERROR << "execl faild!!" << endl;
}
exit(0);
}
else if (m_pid == -1)
{
//出错
LOG_ERROR << "fork err!!" << endl;
}
else
{
m_hPipes[Read] = pipeFDs[Read];
m_hPipes[Write] = pipeFDs[Write];
//父进程
LOG_DEBUG << "parent process" << endl;
}
return bRet;
}
...全文
相关推荐
上海大学-计算机操作系统实验报告.docx
子进程分别启动不同程序,并结束。反复执行该程序,观察运行结果,结束的先后,看是否有不同次序。思考:子进程运行其他程序后,进程运行环境怎样变化的?反复运行此程序看会有什么情况?解释一下。
PHP使用pcntl_fork实现多进程下载图片的方法
接着,对每个URL,使用`pcntl_fork()`创建一个子进程,子进程负责下载图片。父进程则通过`pcntl_waitpid()`等待子进程结束,确保所有图片下载完成后才继续执行。```php<?
linux系统进程管理
进程可以通过fork()系统调用来创建子进程。父进程通过调用fork()创建一个新的进程副本(子进程),然后子进程可以继续执行与父进程相同的代码或通过exec()家族函数执行新的程序。
android系统从init进程开始到systemserver启动详细流程
- **zygote最终进化为所有app进程的父进程**:`zygote`进程通过fork()生成子进程的方式启动应用程序进程,从而成为所有应用程序进程的父进程。#### 7.
qt使用QProcess实现父子进程通信,适用linux平台
Qt是一个强大的跨平台应用程序框架,它提供了丰富的功能来处理这种通信,其中之一就是QProcess类。本篇文章将深入探讨如何在Linux环境下,使用Qt的QProcess类实现父子进程间的通信。



