2014-01-12 4 views
0

저는 arduino를 사용하여 열전쌍의 데이터를 노트북 (OSX)에 저장하고 있습니다. 나는 C 프로그램에 저장된 데이터를 사용하고 싶지만 몇 가지 의구심이있다. C 프로그램에서 프로세스 (명령 셸)를 시작하고 종료하는 방법은 무엇입니까?

내가이 작은 예를 가지고 : 나는 일부 파일 직렬 (아두 이노를) 리디렉션하려고

include <stdio.h> 
include <stdlib.h> 


int main (void) 

{ 
    int a; 
    a=fork(); 
    if(a==0) 
    { 
    system("cat /dev/cu.usbmodem1a21 - 9600 >> num.txt"); 
    } 

    return 0; 
} 

를, 그래서 코드가 실행 아래에있는 동안 나는 과정을 복제하고 명령을 실행하는 데 fork를 사용 . 그러나 이것은 콘솔을 사용하여 프로세스를 수동으로 종료해야하기 때문에 더러운 솔루션입니다. 동일한 프로그램 내에서 c 코드를 사용하여 프로세스를 종료 할 수있는 방법이 있는지 알고 싶습니다.

미리 감사드립니다.

ps : 나는 getpid()를 사용하여 프로세스를 죽이려고했지만, 다시 생각해 보면 더러운 해결책이라고 생각합니다.

+0

'시스템'대신'exec' 중 하나를 사용할 수 있습니다. 'system'은 또 다른 쉘을 생성 한 다음 cat을위한 또 다른 프로세스를 생성합니다. 총 3 개의 새로운 프로세스를 생성합니다. – Marian

+0

당신의 대답은 매우 유용합니다. 같은 시간에 실행되는 많은 OS 프로세스가 있습니다. :) – mrmurmanks

답변

0

pid를 가져 오기 위해 getpid()를 호출 할 필요가 없습니다. fork() 함수는 부모의 프로세스에서 자식의 PID를 반환하고 자식 프로세스에서 0을 반환합니다. 따라서 SIGKILL을 자식 프로세스에 직접 보낼 수 있습니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <signal.h> 

int main() 
{ 
    pid_t pid; 
    pid = fork(); 
    if (pid == 0) { 
     system("cat /dev/cu.usbmodem1a21 - 9600 >> num.txt"); 
    } else { 
     /* ops */ 
     kill(pid, SIGKILL); 
    } 
    return 0; 
} 
관련 문제