프로세스, fork() 사용법에 대한 간단한 도움 좀 부탁드립니다..

ngw2833의 이미지

아래의 소스와 컴파일 및 실행결과인데요..

pid = fork();
위 문장이 실행되면 프로세스 이미지 복제를 한다고 배웠습니다.
그러니까.. 자식프로세스가 생기는 거죠.
fork로 리턴한 값이 들어있는 0이 있으면 자식프로세스
그 외의 경우 부모프로세스로 알고 있구요.

그 뒤로 결과를 어떻게 해석해야하는지 도저히 모르겠습니다.

제가 예상한 바로는

자식 프로세스가 생성이 됐으면
This is the child
This is the child
This is the child
This is the child
This is the child
출력이

그게 아니라면
This is th parent
This is th parent
This is th parent
출력이 맞다고 생각하는데..

꼭 좀 도움 좀 부탁드립니다.

-------------------------------------------------------------------------------------------

추가적으로 제가 더 공부하면서 추론한 내용인데, 이게 맞는지 모르겠네요.

fork()가 호출되면 프로세스는 두 개가 생깁니다.
부모프로세스와 자식프로세스
리눅스를 우주같은 공간이라고 생각하면 똑같은 프로세스가 두 개 생기는 것이죠.
부모프로세스를 똑같이 복사한 것이 자식프로세스구요.

두 프로세스가 서로 같이 돌아가는 겁니다.
그러면서 사이좋게 커맨드창에
부모프로세스가 puts한 번 출력하고,
자식 프로세스가 puts 한 번 출력하고,
그런데 자식 프로세스 상의 fo문은 5~1번을 돌아야 하기 때문에 2번 정도 더 출력시키는 것이고..

근데 부모/자식이 순서없이 커맨드에 puts(message)를 하니까 정신이 없네요.
그래서 자식이 끝날 때까지 부모가 기다리게 하기 위해 wait라는 함수를 사용할 수도 있고요.

어떻게 이해해보려고 노력한 추론결과인데, 정답에 근접한가요..;;

File attachments: 
첨부파일 크기
Image icon 1.png86.87 KB
Image icon 2.png40.02 KB
Lipi의 이미지

둘다 별도의 프로세스로 실행이 되었으나 하나의 표준 출력 스트림으로 출력이 된 것입니다. 부모 프로세스건 자식 프로세스이건 fork()함수 이후로 별도로 동작을 하였으나, 한 곳으로 출력하였을 뿐입니다. printf 대신에 fprintf로 별도의 파일에 출력하면 각각의 파일이 생긴 것을 알 수 있을 겁니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.