Hi Shaopeng, On 12/1/2022 12:20 AM, Shaopeng Tan (Fujitsu) wrote: > Hi Reinette, > >> On 11/30/2022 12:32 AM, Shaopeng Tan (Fujitsu) wrote: >> >>> Removing ctrl_handler() is only part of the fix in the next version(v5). >>> All fixes as follows. >>> >>> --- a/tools/testing/selftests/resctrl/cat_test.c >>> +++ b/tools/testing/selftests/resctrl/cat_test.c >>> @@ -98,12 +98,17 @@ void cat_test_cleanup(void) >>> remove(RESULT_FILE_NAME2); >>> } >>> >>> +static void ctrlc_handler_child(int signum, siginfo_t *info, void >>> +*ptr) { >>> + exit(EXIT_SUCCESS); >>> +} >>> + >> >> Could you please elaborate why this is necessary? > > If enter "ctrl-c" when running "resctrl_tests -t cat", > SIGINT will be sent to all processes (parent&child). > > At this time, the child process receives a SIGINT signal, but does not take any action. > In this case the parent process may not call ctrlc_handler() as expected. Apologies, but I am not able to follow. My understanding is that the ideal in working an failing case is for the parent to kill the child. Could you please elaborate why the ctrlc_handler() may not be called? > Therefore, ctrlc_handler_child() is necessary. > > It may be better to ignore the signal, then code can be simple as follows. > ---- > if (bm_pid == 0) { > param.mask = l_mask_1; > strcpy(param.ctrlgrp, "c1"); > strcpy(param.mongrp, "m1"); > param.span = cache_size * n / count_of_bits; > strcpy(param.filename, RESULT_FILE_NAME1); > param.num_of_runs = 0; > param.cpu_no = sibling_cpu_no; > /* Ignore the signal,and wait to be cleaned up by the parent process */ > sigfillset(&sigact.sa_mask); > sigact.sa_handler = SIG_IGN; > //sigact.sa_sigaction = ctrlc_handler_child; //delete > if (sigaction(SIGINT, &sigact, NULL) || > sigaction(SIGTERM, &sigact, NULL) || > sigaction(SIGHUP, &sigact, NULL)) > perror("# sigaction"); > } else { Reinette