여러개의 쓰레드 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()의 권한이 다른가요?
> ... 실행시키고 ... > ... 프로그램은 종료되었지만, 프로그램과 연결된 device driver는 살아있습니다 ...
설명이 구체적이지 못하거나 이해가 불가능할 정도로 애매합니다.
ls -l /proc/${백그라운드로_실행되고있는_스크립트의_PID}/fd/ 해보시고 그놈이 장치를 open 하고 있다면, 작성하신 프로그램에서 장치 open() 때 O_CLOEXEC 플래그를 같이 주세요.
외계어로 설명했는데도 정확한 답변을 주시네요 ㅠㅠ O_CLOEXEC 를 쓰니까 바로 해결됐습니다. 감사합니다!
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
exit()을 하기 전에 device driver는
exit()을 하기 전에 device driver는 제거를 하셨나요?
exit(0) 하기전에 close() 로
exit(0) 하기전에 close() 로 device driver 연결 끊어주고 했지만 결과는 같습니다.
만약 main thread에서 특정 시점에 exit(0)을 할때는 정상 종료됩니다..
main thread에서 exit()과 다른 sub thread에서 exit()의 권한이 다른가요?
> ... 실행시키고
> ... 실행시키고
...
> ... 프로그램은 종료되었지만, 프로그램과 연결된 device driver는 살아있습니다
...
설명이 구체적이지 못하거나 이해가 불가능할 정도로 애매합니다.
ls -l /proc/${백그라운드로_실행되고있는_스크립트의_PID}/fd/
해보시고 그놈이 장치를 open 하고 있다면, 작성하신 프로그램에서 장치 open() 때 O_CLOEXEC 플래그를 같이 주세요.
외계어로 설명했는데도 정확한 답변을 주시네요 ㅠㅠ
외계어로 설명했는데도 정확한 답변을 주시네요 ㅠㅠ
O_CLOEXEC 를 쓰니까 바로 해결됐습니다. 감사합니다!
댓글 달기