springzhang 发表于 2016-11-18 11:33:47

为什么我创建了一个线程,但ps时会出现3个同名的进程呢

各位大神,求助一个问题,为什么我创建了一个线程,但ps时会出现3个同名的进程呢?

#ps
PID USER       VSZ STAT COMMAND
    1 root      1360 S    init
    2 root         0 SW<
    3 root         0 SW<
    4 root         0 SW<
    5 root         0 SW<
    8 root         0 SW<
   93 root         0 SW<
104 root         0 SW<
125 root         0 SW   
126 root         0 SW   
127 root         0 SW<
188 root         0 SW<
247 root         0 DW<
250 root         0 DW<
269 root      1352 S    /sbin/syslogd -n -O /var/log/messages -s 32 -b 1 -m 20
272 root      1360 S    /sbin/klogd -n
274 root      2896 S    /sbin/inetd
275 root      1356 S    {console.sh} /bin/sh /etc/init.d/console.sh
280 root      1356 S    getty -L 115200 /dev/ttyS0 vt100
282 root      2564 S    /MeterRoot/LEDRoot/LEDwd
284 root      2444 S    /MeterRoot/LEDRoot/LEDsm
285 root      5564 S    /MeterRoot/LEDRoot/LEDcd
293 root      2036 S    /MeterRoot/LEDRoot/LEDapn
294 root      3176 S    /MeterRoot/LEDRoot/LEDtask
303 root      2560 S    /MeterRoot/LEDRoot/LEDdel
304 root      5176 S    /MeterRoot/LEDRoot/LEDsc
308 root      3084 S    /MeterRoot/LEDRoot/LEDtt
13363 root      1360 S    /sbin/telnetd
13364 root      1368 S    -sh
13977 root         0 SW<
13978 root         0 SW<
14045 root      1360 S    /sbin/telnetd
14046 root      1368 S    -sh
14161 root      7152 S    /MeterRoot/LEDRoot/LEDplc
14164 root      2288 S    /MeterRoot/SYSUtils/pppd call gprs
14167 root      7152 S    /MeterRoot/LEDRoot/LEDplc
14168 root      7152 S    /MeterRoot/LEDRoot/LEDplc
14178 root      1356 R    ps


void *heartBeatPthread(void *arg)
{javascript:;
   int ret;
   int j,alarmflag=0;

   time_t nowTime;
   struct tm *nowTimeStruct;
   time(&nowTime);
   nowTimeStruct = localtime(&nowTime);

   int sumTime = 0;      //累计进入广播的时间
   int sumTime_key = 0;    //累计进入组网的时间
   char *sqlorder;
   for(;;)
      {
         sleep(1);
         sumTime++;
         sumTime_key++;
         pthread_mutex_lock(&mutex);

         nowTime = time(NULL);//UTC
         nowTimeStruct = localtime(&nowTime);//当前时间结构体
      if(broadFlag > 0)
      {
         broadFlag ++;
         }
/************************广播对时*******************************/
         if((1800+offSet) == sumTime || broadFlag > (offSet/3+5))
      {
             sumTime = 0;
             broadFlag = 0;
             memset(userdata, 0, 256);
             userdata = 0x0a;

             userdata = nowTimeStruct->tm_sec + 0x33;             //秒
            userdata = nowTimeStruct->tm_min + 0x33;             //分
             userdata = nowTimeStruct->tm_hour + 0x33;                //时
             userdata = nowTimeStruct->tm_mday + 0x33;                //日
             userdata = nowTimeStruct->tm_mon + 0x01 + 0x33;          //月
            userdata = nowTimeStruct->tm_year -0x64 + 0x33;          //年
            memcpy(userdata+7, &send_count, 4);
         
         ret = msgBroadToSlaveNode(broadcast_node, 0x08, broadcastAfn, F3);

             sleep(3);

             for(j=0;j<10;j++)
            {
               if(LEDPLC_OK == getHostNodeAddr())          /*获取主节点地址*/
                {
                     if(1 == alarmflag)
                     {
                        sqlorder = "insert into ALARM(,,,) values(9,0,5,0);";
                        sqliteInsert(sqlorder);
                        sendSocketWarnMsg(9, 0x00);
                  }
                     alarmflag = 0;

                     printf("getHostNodeAddr is sucess!!!!!!!!!!!!!!!!!!\n");
                     break;
               }
               if(9 == j && 0 == alarmflag)
               {
                  alarmflag = 1;
         sqlorder = "insert into ALARM(,,,) values(9,1,5,0);";
                     sqliteInsert(sqlorder);
                     sendSocketWarnMsg(9, 0x01);
               }
             }
         }

/************************广播对时*******************************/

/************************PLC组网*******************************/

         if(1800 == sumTime_key)
         {
             sumTime_key = 0;
             plcKeyUpdate();
         }
/************************PLC组网*******************************/


/************************半夜更新策略*******************************/
         if(((strategyTime+offSet)/60) != nowTimeStruct->tm_hour && 1 == tomorrowFlag)
         {
             tomorrowFlag = 0;

      }
      //添加strategyTime 变量,进程开始读数据库,读失败或者零值默认为21点
         if((((strategyTime+offSet)/60)) == nowTimeStruct->tm_hour && ((strategyTime+of    fSet)%60) <= nowTimeStruct->tm_min && 0 == tomorrowFlag)
         {
             tomorrowFlag = 1;
             getPoolNum();
             singleStrategyUpdate();

         }
/*************************半夜更新策略*******************************/
         pthread_mutex_unlock(&mutex);
    }
}

创建线程:

pthread_attr_init(&attr);                           /*初始化线程属性*/

   pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); /*设置为分离线程*/

   if(0 != pthread_create(&heartbeattid, &attr, heartBeatPthread, NULL))
   {
         printf("Create getWarnPthread is failed!\n");
         return LEDPLC_ERROR;
   }

   pthread_attr_destroy(&attr);

就是创建这个线程,ps后就会出现3个以上的进程。我想知道这个和内核,以及busybox有没有关系。因为我之前是用的2.6.34是没问题的,而现在用的是2.6.31的,busybox的版本是1.21.1的。

希望大神们指点迷津。

谢谢!
页: [1]
查看完整版本: 为什么我创建了一个线程,但ps时会出现3个同名的进程呢