首页 新闻 搜索 专区 学院

Linux进程

0
悬赏园豆:20 [待解决问题]

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <ctype.h> /* 允许建立的子进程个数最大值 */
#define MAX_CHILD_NUMBER 10 /* 子进程睡眠时间 */
#define SLEEP_INTERVAL 2 int proc_number=0; /* 子进程的自编号,从0开始 */
void do_something();  

main(int argc, char* argv[])

{  

     /* 子进程个数 */

      int child_proc_number = MAX_CHILD_NUMBER;

      int i, ch;

      pid_t  child_pid;

      pid_t pid[10]={0}; /* 存放每个子进程的id */

      if (argc > 1) /* 命令行参数第一个参数表示子进程个数*/

     {

           child_proc_number = atoi(argv[1]);

           child_proc_number= (child_proc_number > 10) ? 10 :

                                               child_proc_number;

     }

      ……

for (i=0; i<child_proc_number; i++) {

     /* 填写代码,建立child_proc_number个子进程要执行

     * proc_number = i;

     * do_something();

     * 父进程把子进程的id保存到pid[i] */

}

      /* 让用户选择杀死进程,数字表示杀死该进程,q退出 */

      while ((ch = getchar()) != 'q')      {

            if (isdigit(ch))  {

                   /*  填写代码,向pid[ch-'0']发信号SIGTERM,

                    * 杀死该子进程 */

           }

      }

      /* 在这里填写代码,杀死本组的所有进程 */

      return;

}

void do_something() {

     for(;;)  { 

         printf("This is process No.%d and its pid is %d,

        proc_number,  getpid());

         sleep(SLEEP_INTERVAL); /* 主动阻塞两秒钟 */
     }

补全代码?????

那位大神会???

oclili的主页 oclili | 初学一级 | 园豆:198
提问于:2012-10-29 09:50
< >
分享
所有回答(2)
0

帮顶!!!

jason2013 | 园豆:1998 (小虾三级) | 2012-10-29 10:00
0
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <ctype.h>        /* 允许建立的子进程个数最大值 */
#define MAX_CHILD_NUMBER 10    /* 子进程睡眠时间 */
#define SLEEP_INTERVAL 2
int proc_number = 0;        /* 子进程的自编号,从0开始 */
void do_something ();

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

  /* 子进程个数 */
  int child_proc_number = MAX_CHILD_NUMBER;

  int i, ch;

  pid_t child_pid;

  pid_t pid[MAX_CHILD_NUMBER] = { 0 };    /* 存放每个子进程的id */

  if (argc > 1)            /* 命令行参数第一个参数表示子进程个数 */
    {
      child_proc_number = atoi (argv[1]);
      child_proc_number = (child_proc_number > 10) ? 10 : child_proc_number;
    }
  //……
  child_pid = fork ();
  for (i = 0; i < child_proc_number; i++)
    {
      if (child_pid < 0)
    {
      perror ("creat child ps error!");
      exit (1);
    }
      else if (child_pid == 0)
    {
      do_something ();
    }
      else
    {            //Only parent Process  creat child process
      pid[i] = child_pid;
      printf
        ("===================>creat child ps:%d, pid[%d] finished!\n",
         child_pid, i);
      child_pid = fork ();
    }
    }

  while ((ch = getchar ()) != 'q')
    {

      if (isdigit (ch))
    {
      /* pid[ch-'0']发信号SIGTERM,
       * 杀死该子进程 */
      int ret;
      ret = kill (pid[ch - '0'], SIGKILL);
      if (!ret)
        {
          printf ("Kill child ps pid[%d]\n", ch - '0');
        }
    }

    }

  /* 在这里填写代码,杀死本组的所有进程 */
  if (!kill (0, SIGKILL))
    {
      printf ("Kill all child ps!\n");
    }
  return 1;

}

void
do_something ()
{

  for (;;)
    {

      printf ("This is process No.%d and its pid is %d\n", proc_number,
          getpid ());
      sleep (SLEEP_INTERVAL);    /* 主动阻塞两秒钟 */
    }

}
OrO | 园豆:211 (菜鸟二级) | 2012-11-30 23:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册