쓰레드 질문

삼구의신의 이미지

여러개의 쓰레드 main, a, b, c 가 있을 때
b쓰레드에서 특정 시점에 shell script를 백그라운드로 실행시키고
프로그램 전체 종료하는 exit(0)을 합니다.
이때 ps -ef 으로 보면 프로그램은 종료되었지만, 프로그램과 연결된 device driver는 살아있습니다..
이게 왜이런지 알 수 있을까요?

라스코니의 이미지

exit()을 하기 전에 device driver는 제거를 하셨나요?

삼구의신의 이미지

exit(0) 하기전에 close() 로 device driver 연결 끊어주고 했지만 결과는 같습니다.

만약 main thread에서 특정 시점에 exit(0)을 할때는 정상 종료됩니다..
main thread에서 exit()과 다른 sub thread에서 exit()의 권한이 다른가요?

bushi의 이미지

> ... 실행시키고
...
> ... 프로그램은 종료되었지만, 프로그램과 연결된 device driver는 살아있습니다
...

설명이 구체적이지 못하거나 이해가 불가능할 정도로 애매합니다.

ls -l /proc/${백그라운드로_실행되고있는_스크립트의_PID}/fd/
해보시고 그놈이 장치를 open 하고 있다면, 작성하신 프로그램에서 장치 open() 때 O_CLOEXEC 플래그를 같이 주세요.

삼구의신의 이미지

외계어로 설명했는데도 정확한 답변을 주시네요 ㅠㅠ
O_CLOEXEC 를 쓰니까 바로 해결됐습니다. 감사합니다!