각 자식 프로세스가 exec 시스템 호출을 사용하여 이미지를 변경하기 전에 자식 프로세스에 스레드를 만들고 싶습니다. 그러나, pthread_create 호출은 간과되고있는 것 같습니다.pthread_create b/w fork 및 exec
pthread_t thread;
pthread_attr_t attribute;
pthread_attr_init(&attribute);
pthread_attr_setdetachstate(&attribute, PTHREAD_CREATE_DETACHED);
pid_t cid = fork();
if(cid == 0) //CHILD Process
{
switch(x->option)
{
case 1: pthread_create(&thread, &attribute, compressShow, NULL);
execl("/home/aamir/Lab/ass3/compression", "compression", source, destination, NULL);
cout<<"Execution failed."<<endl; break; //This segment will execute if exec fails.
}
else //PARENT Process
{
wait(0); //Prevents termination of original main until forked exec completes execution
pthread_cancel(thread);
}
스레드는 기본적으로 '.'을 출력하기위한 진보 디스플레이입니다. (점들)은 갈래 모양의 아이와 일치한다.
exec 호출을 제거하면 스레드가 실행됩니다. 나는 Google에서 검색 한 후 async safe 함수와 관련이있는 fork와 exec 사이에서 pthread_create를 사용할 수 없다는 것을 읽을 수 있습니다. 좀 도와 줄 수있어?
각 프로세스는 정의에 따라 자체 스레드 세트와 자체 주소 공간을 가지고 있습니다. 따라서 부모는 자식이 만든 스레드를 보지 못합니다. –
내가 볼 수있는 가능한 해결책 중 하나는 포크가 있기 전에 부모에 스레드를 만드는 것입니다. 주변에 다른 가능한 작업이 있습니까? –
예, 상위에 스레드를 만듭니다. 또한'pipe'를 생성하십시오. 자식이 파이프에 글을 쓰게하고, 부모 스레드가 파이프를 읽게하십시오. –