script/tests/timelimit.c

ソースコードを見る。

関数

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.c18 行で定義されています。

参照先 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.c28 行で定義されています。

参照先 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.c35 行で定義されています。

参照先 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.c42 行で定義されています。

参照先 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]

timelimit.c49 行で定義されています。

00050 {
00051         kill(-child_pid, SIGTERM);
00052 }

static void new_process_group ( void   )  [static]

timelimit.c54 行で定義されています。

参照元 main().

00055 {
00056         if (setpgid(0,0) == -1) {
00057                 perror("setpgid");
00058                 exit(1);
00059         }
00060 }

int main ( int  argc,
char *  argv[] 
)

timelimit.c63 行で定義されています。

参照先 errnonew_process_group()sig_alrm_term()sig_term()sig_usr1()statususage().

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.c16 行で定義されています。


Sambaに対してSat Aug 29 21:24:24 2009に生成されました。  doxygen 1.4.7