static void cpWorker_init(int worker_id, int group_id) { //标识为worker进程 CPGL.process_type = CP_PROCESS_WORKER; cpWorker_attach_mem(worker_id, group_id); CPWG.id = worker_id; CPWG.gid = group_id; CPWG.pid = getpid(); char fifo_name[CP_FIFO_NAME_LEN] = {0}; sprintf(fifo_name, "%s_%d", CP_FIFO_NAME_PRE, group_id * CP_GROUP_LEN + worker_id); //client 2 worker CPWG.pipe_fd_read = cpCreateFifo(fifo_name); sprintf(fifo_name, "%s_%d_1", CP_FIFO_NAME_PRE, group_id * CP_GROUP_LEN + worker_id); //worker 2 client int pipe_fd_write = cpCreateFifo(fifo_name); CPWG.pipe_fd_write = pipe_fd_write; }
int cpFork_one_worker(int worker_id, int group_id) { int pid, ret; pid = fork(); if (pid < 0) { cpLog("Fork Worker failed. Error: %s [%d]", strerror(errno), errno); return FAILURE; } else if (pid == 0) { //标识为worker进程 CPGL.process_type = CP_PROCESS_WORKER; cpWorker_attach_mem(worker_id, group_id); ret = cpWorker_loop(worker_id, group_id); exit(ret); } else { return pid; } }