Вызов execv после создания потока

Я очень плохо знаком с потоками, процессами, execv и т. Д. Я исследовал и обнаружил, что когда вы выполняете execv, он занимает пространство вызывающего процесса. Мне интересно, что происходит, когда вы создаете поток в main, а затем вызываете execv, сразу после потока (не до его завершения, а сразу после создания потока). Я знаю, что execv заменит основной, но означает ли это, что он также заменит поток, или поток сможет выполняться и завершаться как обычно?

Небольшой пример того, что я спрашиваю:

  int main(){
      printf("hello from main!);
      char *buffer = "some data";

    if(pthread_creat(&mythreadpid, NULL, thread1, buffer){
        printf("ERROR!!");
     }

     execv(...) //do execv here

}

void *thread1(void *buffer){
  printf("calling from my thread!");

 //do something else

}

Я проверил это, и я испытал странное поведение, так как мой поток не будет завершен, поэтому я хочу знать, является ли это причиной этого

1 ответ

Решение

Все exec функции заменяют весь процесс исполняемой программой. Все темы уничтожены.

Если вы хотите выполнить другую программу, не затрагивая текущий процесс, вы должны использовать fork() сначала создать новый процесс, и вызвать execv() в дочернем процессе. См. Безопасно ли разветвляться из потока? для некоторых предостережений, которые следует учитывать при использовании fork() в многопоточной программе.

Другие вопросы по тегам