리눅스 fork()에 대해서 갑자기 궁굼한 점이 생겨서 질문을 올립니다.

jongyoungcha의 이미지

만약에 리눅스에서 fork()를 하지 않습까?

pid_t pid = fork();

를 하면 pid 에는 0이 저장되서

if(pid == 0){
자식구간
}else if(pid == -1){
포크실패
}else{
부모공간
}

예 pid가 0이되는데

사실 제가 알기로는 프로세스당 파일디스크립터의 0, 1, 2인덱스는 stdin, stdout, stderr로 할당되는 걸로 알고 있습니다.

그래서 파일디스크립터 인덱스를 할당 받을때는 3부터 받는다......

그리고 fork를 하면 부모의 파일디스크립터의 인덱스를 복사되서

자식프로세스에게 전달되는 걸로 알고있습니다.

그러면 fork 시에 저장되는 자식의 pid 0의 값은 공간은 파일디스크립터에 저장되지 않는다는 것을 뜻합니까?

갑자기 너무 궁굼해져서 이렇게 질문을 올리게 되네요

익명 사용자의 이미지

fork의 결과로 반환되는 process id는 file descriptor와 관계가 없습니다.

jongyoungcha의 이미지

그러면 어떤 값이 들어오는 걸까요 ㅠㅠ

익명 사용자의 이미지

fork는 현재 프로세스를 복사해서 두개의 프로세스로 나누는 함수입니다.
fork의 반환값은 프로세스 id인데 원본(부모) 프로세스의 경우 자식의 프로세스 id를 반환하고 자식 프로세스일 경우 0을 반환하여 자식 프로세스임을 나타내는 것입니다. (프로세스 id 0은 유효한 프로세스 id 값이 아니지만 fork 함수의 특성상 자식임을 나타내기 위한 방법으로 사용한 것입니다)
fork는 프로세스를 그대로 복제하는 것이므로 모든 handle 값은 그대로 복사됩니다. file descriptor도 예외는 아닙니다.

'fork 시에 저장되는 자식의 pid 0의 값은 공간은 파일디스크립터에 저장되지 않는다'라는 말을 언급하신 걸로 봐서 아무래도 프로그래밍 초보이신 듯 한데요. (언급하신 내용은 일상 생활에서 쓰는 언어로 표현하면 '짜장면에 짜장면 집 주소를 넣지 않는다'라는 말과 비슷하다고 보면 됩니다. 즉, 말은 말인데 이상한 말입니다.)
Windows든 UNIX 든 관계 없이 프로그래밍 서적을 찾아서 프로세스, 쓰레드, 핸들에 대한 개념을 명확히 정립하시는 것이 우선일 듯 합니다.

jongyoungcha의 이미지

감사합니다 ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.