pthread_cancel有两个正在运行的进程

时间:2014-09-26 00:56:57

标签: c multithreading

我希望在我的进程执行完毕后使用pthread_cancel来取消我的“计时器”线程。基本上我们正在将修改后的终端作为项目。当我在一个终端中呼叫睡眠300时,我希望能够打开另一个终端,运行相同的程序,但是调用“pkill -HUP sleep”并取消睡眠呼叫和计时器。但是,计时器会继续使用我当前的解决方案。

  else if (pid > 0){
    pthread_t thread;
    int threadError = pthread_create(&thread, NULL, timer, NULL);
    if (threadError != 0){
      exit(1);
    }
    int status = 0;
    wait(&status);
    if (WIFEXITED(status)){
    // how do I change this to kill the other thread?
      threadError = pthread_cancel(thread);
      if (threadError != 0)
        exit(1);
      printf("Child exited with code %d\n", WEXITSTATUS(status));
    }
  else{ // child
    // run command and capture error with errorNumber
    int errorNumber = execvp(argv[0], argv);
    if (errorNumber == -1){
      logerror(5, "execvp", "Error running command.");
      exit(1);
    }
  }

我也会包括我的计时器功能。

void * timer(void * nothing){
  //tracks seconds of execution
  time_t start = time(NULL);
  for(;;){
    sleep(UPDATETIME); //constant set to 1
    printf("Elapsed time: %ld seconds\n", time(NULL) - start);
  }
  pthread_exit(0);
}

我一直在寻找pthread_cancel的手册页,当我正在运行这个程序的新实例时,我似乎无法找到取消此线程的方法。

编辑:我认为我的问题实际上是这个pkill命令没有正确终止我的子进程而不是pthread_cancel有问题。我将编辑上面的内容以包含我的子进程。

1 个答案:

答案 0 :(得分:0)

在pthread_join();比pthread_cancel()更好;请查看文档和示例......