gcc 소스인데요~ 아래 파일을 돌리면어떻게 돼나요`?이론적으로

newman1590의 이미지

#include<stdio.h>

void main(int argc, char *argv[])/ 그리고 이부분도 좀 알려주세요!!
{
int pid
pid=fork();
if(pid<0)
{
fprintf(stderr,"fork failed");
exit(-1);
}
else if (pid==0)
{
execlp("/bin/ls","ls",NULL);
}
else
{
wait(); // 이부분이 어떻게되는지요~
printf("Child Complete");
exit(0);
}
}

cdpark의 이미지

man fork
man wait

질문하기 전에 시스템 프로그래밍 책 한 section만 읽어보시죠? :(

codebank의 이미지

#include <stdio.h>


void main (int argc, char *argv[]) // 그리고 이부분도 좀 알려주세요!!
{
    int pid

    pid = fork ();
    if (pid < 0) {
        fprintf (stderr, "fork failed");
        exit (-1);
    } else if (pid == 0) {
        execlp ("/bin/ls", "ls", NULL);
    } else {
        wait (); // 이부분이 어떻게되는지요~
        printf ("Child Complete");
        exit (0);
    }
}

일단 소스를 올리실때는 BBCode를 이용해주십시요.

물어보신 부분에 대한 답변을 먼저 드리겠습니다.
main (int argc, char* argv[]) 부분은 시스템의 프로그램 실행과 관련이 있습니다.
보통 프로그램을 실행시키면(프로그램 이름이 test이라면...)
# test
형태로 실행을 시킵니다. 위에 인수는 이때 사용합니다.
다음 예에서
# test 1 2 argument 3
이렇게 되었을경우 int argc로는 인수의 갯수인 4가 들어옵니다.
또한 *argv []로는
argv [0]에는 'test', argv [1]에는 '1', argv [2]에는 '2', argv [3]에는 'argument',
argv [4]에는 '3'이라는 값이 들어갑니다.

fork()가 실패하면 0보다 작은 값이 리턴됩니다.
fork()가 성공하면 자기자신(root)에는 child의 PID값이 리턴되고 fork()에 의해서 생성되는
child는 0의 값이 리턴됩니다.

마지막으로 현재 물어보시는 부분은 기본적인 UNIX C언어책을 보면 자세하게
설명되어있습니다.
책을 먼저보실것을 권해드립니다. 책을 읽어보지 않고 이런식으로 질문을 해서는
좀체로 공부에 도움이 되지 않습니다.

------------------------------
좋은 하루 되세요.

Seven..의 이미지

#include <stdio.h> 


void main (int argc, char *argv[]) // 그리고 이부분도 좀 알려주세요!! 
{ 
    int pid 

    pid = fork (); 
    if (pid < 0) { 
        fprintf (stderr, "fork failed"); 
        exit (-1); 
    } else if (pid == 0) { 
        execlp ("/bin/ls", "ls", NULL); 
    } else { 
        wait (); // 이부분이 어떻게되는지요~ 
        printf ("Child Complete"); 
        exit (0); 
    } 
} 

pid==0인 child process가 종료가 되겠죠 완료를 하면..
그때까지 기다립니다...

위에 부분은, 명령줄인수입니다.

Beginning Linux Programming se- 정보문화사

한번 보시면 도움이 되실겁니다.

VENI VIDI VICI

shs0917의 이미지

exit(-1)이 아니라 exit(1)로 해야 맞지 않을까요??

컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러

바깥줄의 이미지

이 소스 한빛 미디어에서 나온
secue coding 핵심 원리라는 책에서 본 예제랑 비슷 하던데 컴파일 오류는 없는데 실행은 안되고. 그리고 뜻도 이해도 잘 안되었던 건뎁...

그책에서는 외부 프로그램 실행 함수로
execle("/bin/ls", "ls", "-al", NULL);
실행을 하였더군요...

이 함수에 대해서 설명 좀 부탁 드립니다. 맨페이지도 읽어 봤는데 저의 아둔한 머리로는 이해가 잘 안되더군요. system()함수는 쓰지 말라면서 그러던데 그건 또 왜 그런지...

---------------------------------
나는 오늘도 달립니다.

mach의 이미지

codebank wrote:

......
        wait (); // 이부분이 어떻게되는지요~
.........


이것을 아래처럼 해야하고요.
int status;
...
wait(&status)

wait시스템 호출을 사용한 이유는 좀비(zombie process)를 방지하기 위함입니다.
좀비는 언제 생길까? 부모 프로세스가 자식프로세스의 종료를 알고도 처리안해주면 발생.
어떻게 아냐고요? 자식이 죽으면 커널이 부모에게 시그널(sigchild)을 줍니다.
이 때 부모가 이에 대한 처리를 해주지 않으면 좀비가 됩니다.

어떻게 방지할까? 시그널에 대한 처리를 해주면 됩니다. wait시리즈 또는 아예 해당 시그널을 매스킹해놓음

유닉스(리눅스는) 왜 이러한 경우 좀비로 남길까? 프로그래머가 프로세스를 만들었으면,
당연히 그 프로그램의 종료(정상? 비정상?)에 대한 처리를 해야 한다는 명제지요.

부모가 먼저 죽으면? 유닉스는 모든 프로세스가 부모 자식의 관계를 가지게 되어
있습니다. 또한, 인간세계와는 달리 확실한 입양원칙이 있습니다.
부모가 없는 모든 프로세스는 1번 프로세스(init)가 입양한다. 즉, 부모가 1번
프로세스가 되게 됩니다. 이후 자식이 죽으면, 1번 프로세스가 그 시그널에 대한
처리를 해줍니다. 1번이 죽으면? 그럼 유닉스가 죽은겁니다. 종말이지요.

게시판 게시물에서 좀비에 대해 찾아보세요. 검색으로.

글구 관리자님의 답변처럼 책을 잘 ~ 보심을 권합니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

댓글 달기

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