mysql_waitpid.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /* Wait until a program dies */
  14. #ifndef __NETWARE__
  15. #include <my_global.h>
  16. #include <m_string.h>
  17. #include <my_sys.h>
  18. #include <my_getopt.h>
  19. #include <signal.h>
  20. #include <errno.h>
  21. static const char *VER= "1.1";
  22. static char *progname;
  23. static my_bool verbose;
  24. void usage(void);
  25. static struct my_option my_long_options[] =
  26. {
  27.   {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
  28.    0, 0, 0, 0, 0},
  29.   {"help", 'I', "Synonym for -?.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
  30.    0, 0, 0, 0, 0},
  31.   {"verbose", 'v',
  32.    "Be more verbose. Give a warning, if kill can't handle signal 0.", 
  33.    (gptr*) &verbose, (gptr*) &verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
  34.   {"version", 'V', "Print version information and exit.", 0, 0, 0,
  35.    GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
  36.   { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
  37. };
  38. static my_bool
  39. get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
  40.        char *argument __attribute__((unused)))
  41. {
  42.   switch(optid) {
  43.   case 'V':
  44.     printf("%s version %s by Jani Tolonenn", progname, VER);
  45.     exit(-1);
  46.   case 'I':
  47.   case '?':
  48.     usage();
  49.   }
  50.   return 0;
  51. }
  52.  
  53. int main(int argc, char *argv[])
  54. {
  55.   int pid= 0, t= 0, sig= 0;
  56.   progname= argv[0];
  57.   if (handle_options(&argc, &argv, my_long_options, get_one_option))
  58.     exit(-1);
  59.   if (!argv[0] || !argv[1] || (pid= atoi(argv[0])) <= 0 ||
  60.       (t= atoi(argv[1])) <= 0)
  61.     usage();
  62.   for (; t > 0; t--)
  63.   {
  64.     if (kill((pid_t) pid, sig))
  65.     {
  66.       if (errno == EINVAL)
  67.       {
  68. if (verbose)
  69.   printf("WARNING: kill couldn't handle signal 0, using signal 1.n");
  70. sig= 1;
  71. t++;
  72. continue;
  73.       }
  74.       return 0;
  75.     }
  76.     sleep(1);
  77.   }
  78.   return 1;
  79. }
  80. void usage(void)
  81. {
  82.   printf("%s version %s by Jani Tolonennn", progname, VER);
  83.   printf("usage: %s [options] #pid #timenn", progname);
  84.   printf("Description: Waits for a program, which program id is #pid, ton");
  85.   printf("terminate within #time seconds. If the program terminates withinn");
  86.   printf("this time, or if the #pid no longer exists, value 0 is returned.n");
  87.   printf("Otherwise 1 is returned. Both #pid and #time must be positiven");
  88.   printf("integer arguments.nn");
  89.   printf("Options:n");
  90.   my_print_help(my_long_options);
  91.   exit(-1);
  92. }
  93. #else
  94. #include <stdio.h>
  95. main()
  96. {
  97. fprintf(stderr,"This tool has not been ported to NetWaren");
  98. return 0;
  99. }
  100. #endif /* __NETWARE__ */