#include #include #include /* getenv, exit */ #include #include #include "common.h" #include "message.h" extern char merge_task[]; extern pid_t Mergepid; extern STATUS_TABLE *status_table; void start_merge(int i) { int rcode; pid_t pid; char p1[10]; // start the merge task pid = fork(); if (pid == -1) { sprintf(message_buffer, "fork failed %d - This must be fixed - exiting.", errno); report_message(MSG_FAILURE); exit(1); } if (pid == 0) { // this is the child process - use exec to overlay the task code sprintf(p1, "%d", i); rcode = execl(merge_task, merge_task, "-i", p1, NULL); sprintf(message_buffer, "Merge task returned %d - %s.", errno, strerror(errno)); report_message(MSG_FAILURE); return; } Mergepid = pid; status_table->merge_pid = pid; sprintf(message_buffer, "Merge task has pid %d", pid); report_message(MSG_INFORMATION); return; }