#include #include #include #include #include #include using namespace std; void handler(int signo, siginfo_t *info, void *context) { if(signo == SIGTERM) { cout <<"["<< getpid()<<"] "<<"received SIGTERM\n"; exit(0); } } int main(int argc, char **argv) { auto startmain = chrono::high_resolution_clock::now(); struct sigaction sa; memset(&sa, 0, sizeof(struct sigaction)); sa.sa_sigaction = &handler; if (sigaction(SIGTERM, &sa, NULL) == -1) { perror("sigaction"); return EXIT_FAILURE; } pid_t pgid = getpgid(getpid()); if(argc != 5) { cout <<"usage: ./partitioner.out \nprovided arguments:\n"; for(int i = 0; i < argc; i++) cout << argv[i] << "\n"; return -1; } char *file_to_search_in = argv[1]; char *pattern_to_search_for = argv[2]; int len = sizeof(pattern_to_search_for); int search_start_position = atoi(argv[3]); int search_end_position = atoi(argv[4]); int find = 0; pid_t pid = getpid(); ifstream file(file_to_search_in, ios::binary); int len2 = search_end_position - search_start_position; string buffer; buffer.resize(len2); file.seekg(search_start_position); file.read(&buffer[0], len2); //TODO auto a = buffer.find(pattern_to_search_for); if(a != string::npos) { cout << "[" << pid << "]" << " found at" << " " << a + search_start_position << endl; killpg(pgid,SIGTERM); } else { cout << "[" << pid << "]" << " didn't find\n"; } auto endmain = std::chrono::high_resolution_clock::now(); chrono::duration mainduration = endmain - startmain; cout << mainduration.count() << endl; return 0; }