I'm very new to threads, processes, execv, etc. I have researched and found that when you execute an execv, it takes the space of the calling process. I am wondering what happens when you create a thread in main, and then call execv, directly after the thread (not before it finishes but right after the thread is created). I know execv will replace main but does this mean that it will also replace the thread or will the thread be able to execute and complete like normal?
Small example of what I'm asking:
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
}
I have tested this and I did experience strange behavior as my thread wouldn't complete so I want to know if this is the reason for it
All the exec
functions replace the entire process with the program being executed. All threads are destroyed.
If you want to execute another program without affecting the current process, you should use fork()
first to create a new process, and call execv()
in the child process. See Is it safe to fork from within a thread? for some caveats to be aware of when using fork()
in a multi-threaded program.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With