Я очень новичок в потоках, процессах, execv и т. д. Я исследовал и обнаружил, что когда вы выполняете execv, он занимает пространство вызывающего процесса. Мне интересно, что происходит, когда вы создаете поток в main, а затем вызываете execv сразу после потока (не до его завершения, а сразу после создания потока). Я знаю, что execv заменит main, но означает ли это, что он также заменит поток или поток сможет выполняться и завершаться как обычно?
Небольшой пример того, что я прошу:
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
}
Я проверил это, и у меня было странное поведение, так как мой поток не завершался, поэтому я хочу знать, является ли это причиной.
execv
заменяет весь процесс, а не только один поток. - person Barmar   schedule 28.10.2016argc
иargv
наmain()
. Дескрипторы открытых файлов, не имеющиеO_CLOEXEC
, также сохраняются, но другие закрываются при системном вызовеexec*(2)
. - person Luis Colorado   schedule 03.11.2016exec*(2)
, потому что она всегда заменяется той, которая передается системному вызову. И причина та, которую я использовал, и я также пишу свои комментарии, чтобы проиллюстрировать вещи. - person Luis Colorado   schedule 03.11.2016