2012-10-06 6 views
4

나는 간단한 C 프로그램을 가지고 있는데 컴파일했을 때 ./output으로 실행하면 리눅스에 PID가 생기는가? (나는 모든 실행중인 프로그램이 프로세스이고 PID가 있어야한다고 생각합니다.)리눅스의 C 프로그램에 PID가 있습니까?

ps aux 명령을 사용했지만 프로세스 이름을 찾을 수 없습니다.

내 콘솔 응용 프로그램 (C 프로그램)이 Windows 7에서 실행 중일 때 휘발성 도구를 통해 해당 PID를 가져올 수있었습니다.

#include<stdio.h> 

void main() 
{ 
    printf("Hello World!"); 
} 

답변

11

예, Linux에서 실행되는 모든 프로그램에는 PID가 적용됩니다.

귀하의 프로그램은 단지 "Hello, World!"을 인쇄하고 매우 빨리 완료되므로 ps aux을 실행하면 완료됩니다.

또한 void main()int main(void)이어야하며 출력 문자열 끝에 \n을 추가해야합니다.

+0

감사합니다. 하나의 후속 질문 :이 프로그램이 종료되면 데이터 (일부 전역, 정적 및 지역 변수가 있다고 가정)가 메모리에서 지워지는 것입니까? 감사. – Junaid

+1

프로그램이 더 이상 실행되지 않아 프로그램에서 더 이상 액세스 할 수 없습니다. 시스템에 따라 비트가 여전히있을 수 있지만 쉽게 액세스 할 수있는 방법은 없습니다. 또는 시스템이 프로그램에서 사용한 메모리를 지울 수 있습니다. 가상 메모리를 사용하면이 작업이 복잡해집니다. 한 프로그램의 주어진 주소는 다른 프로그램의 동일한 주소와 동일한 실제 메모리 조각이 아닙니다. 요약 : 실질적으로 말하면, 아니오; 기술적으로 말해서, 나는 모른다. 코드에 대한 –

1

해야합니다. 프로그램에서 printf getpid()를 사용하여 확인하십시오.

+0

: http://www.c.happycodings.com/C_on_Unix/code14.html – Prasanth

0

예, 모든 프로세스가 실행되는 동안 PID를 얻습니다. 이 C 프로그램은 매우 수명이 짧은 프로세스로 보이기 때문에 ps aux 명령을 실행하여 PID를 얻으려면 완료해야합니다. 사용자 입력을 기다리는 getchar() 또는 scanf()을 호출 한 다음 다른 터미널에서 ps 명령을 실행하여 PID를 확인하십시오.

+0

getch는 리눅스에 :-) 없습니다. ncurses 라이브러리가 있어야합니다. –

+0

Thanks @AkhilThayyil,에 대한 답을 수정했습니다. 어떤 사용자 입력 함수를 사용하십시오 :) – Vikdor

+0

ncurses가 제공하는'getch()'함수는 Windows의'getch()'함수와 다릅니다. –

1

또는 프로세스 ID를 찾을 수 있도록 절전 모드를 추가하십시오. 네가 깜박 거리는 동안 아마 도망 쳤을거야.

사용이 코드와 별도의 터미널 실행에는 ps

#include <stdio.h> 
#include <unistd.h> 

int main(void) 
{ 
    printf("Hello World!\n"); 
    sleep(3600); 
    printf("Are you bored yet?\n"); 
} 
1

당신은 GETPID

int main() 
{ 
    pid_t pid; 
    printf("Hello World!"); 
    printf("pid of program is %d" , getpid()); 
} 

하거나이 코드를 사용하여 배경에 넣어 사용하여 얻을 수 있습니다.

void main() 
{ 
    printf("Hello World!"); 
} 

출력 : 제안

[[email protected] ~]$ ./c1 & 
[1] 3007 
3007 
관련 문제