65,179
社区成员




class Server {
public:
pid_t pid;
eServer service_id;
char name[MY_PID_NAME_LEN];
//子类继承重写
void server_init(void* par, uint32_t len){}
void server_poll(void){}
Server(eServer id, void* par, uint32_t len);
~Server();
static Server* install(eServer id, void* par, uint32_t len);
static Server* self;
};
Server::Server(eServer id, void* par, uint32_t len) {
uint8_t i = 0;
pid_t pid = fork();
this->service_id = id;
bzero(this->name, MY_PID_NAME_LEN);
len = strlen(mServiceName[this->service_id]);
if (len > MY_PID_NAME_LEN) {
len = MY_PID_NAME_LEN;
}
memcpy(name, mServiceName[this->service_id], MY_PID_NAME_LEN);
if (pid > 0) { //父进程,返回值为子进程的pid
this->pid = pid;
return ;
}
else if (pid == 0) {//子进程,返回值为0
int ret = 0;
//修改新进程的名字
prctl(PR_SET_NAME, this->name, NULL, NULL, NULL);
//获取自己的PID
this->pid = getpid();
//应用初始化,这里由子类重写
this->server_init(par, len);
//应用业务循环,这里由子类重写,应该写成死循环
this->server_poll();
printf(" Warning!!! \n");
exit(EXIT_FAILURE);
}
else {
printf(" Warning!!! \n");
return ;
}
}
class process_sub_1 :public Server {
private:
void server_init(void* par, uint32_t len);
void server_poll(void);
public:
process_sub_1(eServer id, void* par, uint32_t len):Server(id, par, len){
}
};
#include "process_sub_1.h"
void process_sub_1::server_init(void* par, uint32_t len) {
}
void process_sub_1::server_poll(void) {
while (1) {
printf("process_sub_1\n");
usleep(1000 * 2000);
}
}
int main(void) {
process_sub_1::install(eSubService1, NULL, 0);
while (1) {
sleep(1);
}
}