関数 | |
static void | usage (void) |
static void | sig_alrm_kill (int sig) |
static void | sig_alrm_term (int sig) |
static void | sig_term (int sig) |
static void | sig_usr1 (int sig) |
static void | new_process_group (void) |
int | main (int argc, char *argv[]) |
変数 | |
static pid_t | child_pid |
static void usage | ( | void | ) | [static] |
timelimit.c の 18 行で定義されています。
参照先 printf().
00019 { 00020 printf("usage: timelimit <time> <command>\n"); 00021 printf(" SIGUSR1 - passes SIGTERM to command's process group\n"); 00022 printf(" SIGALRM - passes SIGTERM to command's process group\n"); 00023 printf(" after 5s SIGKILL will be passed and exit(1)\n"); 00024 printf(" SIGTERM - passes SIGTERM to command's process group\n"); 00025 printf(" after 1s SIGKILL will be passed and exit(1)\n"); 00026 }
static void sig_alrm_kill | ( | int | sig | ) | [static] |
timelimit.c の 28 行で定義されています。
参照先 fprintf().
参照元 sig_alrm_term()・sig_term().
00029 { 00030 fprintf(stderr, "\nMaximum time expired in timelimit - killing\n"); 00031 kill(-child_pid, SIGKILL); 00032 exit(1); 00033 }
static void sig_alrm_term | ( | int | sig | ) | [static] |
timelimit.c の 35 行で定義されています。
参照先 sig_alrm_kill().
参照元 main().
00036 { 00037 kill(-child_pid, SIGTERM); 00038 alarm(5); 00039 signal(SIGALRM, sig_alrm_kill); 00040 }
static void sig_term | ( | int | sig | ) | [static] |
timelimit.c の 42 行で定義されています。
参照先 sig_alrm_kill().
00043 { 00044 kill(-child_pid, SIGTERM); 00045 alarm(1); 00046 signal(SIGALRM, sig_alrm_kill); 00047 }
static void sig_usr1 | ( | int | sig | ) | [static] |
static void new_process_group | ( | void | ) | [static] |
int main | ( | int | argc, | |
char * | argv[] | |||
) |
timelimit.c の 63 行で定義されています。
参照先 errno・new_process_group()・sig_alrm_term()・sig_term()・sig_usr1()・status・usage().
00064 { 00065 int maxtime, ret=1; 00066 00067 if (argc < 3) { 00068 usage(); 00069 exit(1); 00070 } 00071 00072 maxtime = atoi(argv[1]); 00073 00074 child_pid = fork(); 00075 if (child_pid == 0) { 00076 new_process_group(); 00077 execvp(argv[2], argv+2); 00078 perror(argv[2]); 00079 exit(1); 00080 } 00081 00082 signal(SIGTERM, sig_term); 00083 signal(SIGUSR1, sig_usr1); 00084 signal(SIGALRM, sig_alrm_term); 00085 alarm(maxtime); 00086 00087 do { 00088 int status; 00089 pid_t pid = wait(&status); 00090 if (pid != -1) { 00091 ret = WEXITSTATUS(status); 00092 } else if (errno == ECHILD) { 00093 break; 00094 } 00095 } while (1); 00096 00097 kill(-child_pid, SIGKILL); 00098 00099 exit(ret); 00100 }
pid_t child_pid [static] |
timelimit.c の 16 行で定義されています。