[완료]리눅스 간단한 프로그램 질문입니다. ㅠ.ㅠ
우선.. 짜야하는 프로그램은.. 실행중인 프로세스중에 프로세스 이름을 입력해서
해당 프로세스를 종료하는 프로그램입니다.
제 생각에는... 프로세스 이름이 있는 라인의 처음 pid 부분만 구하면 될것 같은데 이게 어렵네요.. ;;;
프로세스가 몇개 실행되고 있는지도 모르고.. 랜덤인데.. 그리고 실행되는 프로세스 이름도 랜덤이라.. (ex -> gedit, cat 등 이름(길이)이 다르죠..)
lseek으로 위치 변경하기도 참.. 어떻게 해야될지를 모르겠네요.. ;;
아래 코드는 제가 짜보긴 한건데.. ;; 문제가.. 문자열 비교를 어떤식으로 해야되는지
아니면 다른방법으로 어떤식으로 이 문제를 접근해야되는지 참.. 답이 안나오네요.. ㅠ.ㅠ
#include
#include
#include
#include
#include
#include
#define SIZE 1024
main()
{
int nread, filedes;
char buffer[SIZE], buffer2[SIZE];
system("ps > suk4.txt");
if((filedes=open("suk4.txt", O_RDWR)) < 0)
{
printf("fail to call open\n");
exit(1);
}
if((nread=read(filedes, buffer, SIZE)) < 0)
{
printf("fail to call read\n");
exit(1);
}
lseek(filedes, 0, SEEK_END);
printf("현재 실행중인 프로세스 목록을 출력합니다.\n");
printf("%s", buffer);
printf("출력결과를 보고 죽일 프로세스 이름을 입력하세요 : ");
scanf("%s", &buffer2);
close(filedes);
unlink("./suk4.txt");
}
어떻게 buffer2에 받은 문자를 비교해야될지를 도저히 모르겠습니다.
고수분들 도와주세요.. ㅠ.ㅠ
문자열 비교는 strcmp() 를 사용하시면
문자열 비교는 strcmp() 를 사용하시면 됩니다.
조금 주제넘은 참견일수도 있지만,
앞서 올리신 코드나 이 코드에는
항상 올바르게 작동하지 않을 수 있는, 위험한 코드들이 다소 포함되어 있으며,
아직은 리눅스 프로그래밍을 배우는것이 좋은 선택이 아니라는 느낌을 줍니다.
만일 프로그래밍을 지속적으로 공부하실 계획이라면,
대학교 학부 1,2학년 때 흔히 가르치는 자료구조,알고리즘 등을 공부 하신 후에
리눅스나 MS Windows같은 특정 플랫폼에 대항 공부를 시작하세요.
혹, 불가피한 사정으로 어쩔수 없이, 어떻게든 돌아가기만 하는 프로그램을 만들어야 상황이라면,
C언어가 아닌, 쉘스크립트나, 파이썬, 하다못해..자바등을 추천드립니다.
이 프로그램을 정공적인 방법으로 풀려면..
/proc/ 밑의 프로세스 디렉토리들을 훝어서
각 디렉토리 밑의 stat이라는 파일을 읽어들여야합니다.
stat에는 프로세스명과 프로세스 ID을 포함하고 있고
list나, tree등의 자료구조를 만들어서, 해당 /proc 을 통해 얻어낸 프로세스 목록을 저장하고,
사용자로부터 input을 얻었을 때, 해당 문자열과 일치하는 프로세스 정보를 해당 자료구조에서 검색하여
얻어내면 됩니다.
프로세스 이름을 key로 삼은, tree 구조가 가장 적합한 방법일 것입니다.
제가 설명한 부분이 이해하기 힘들다면, 리눅스 프로그래밍 공부보다, 기본적인 자료구조와 알고리즘 공부를 강력하게 추천해드립니다.
그런것 없이, 이런것들 배워봤자 전혀 남는것 없이, 수박 겉햩기식의 지식만 쌓입니다.
감사합니다.
제 문제가 뭔지를 알려주셔 감사드립니다.
이런거 말해주는 사람 사실 별로 없죠.. ^^
글을 읽으면서 공부가 정말 많이 부족했구나 라는 생각이 드네요.
감사드립니다.
그러게요...
이런 프로그램이라면 쉘스크립트가 훨씬 좋은 선택인것 같습니다. 실제로 ps를 system으로 실행해서 파일에 저장하여 읽는것은 리눅스 프로그램이라고 말하기 힘들어 보입니다... 윗분 말씀처럼 일단 기초를 확실히 하는 것이 좋을 것 같습니다.
고맙습니다.
윗분이 친절히 알려주셨지만...
어쨌든 고맙습니다.
열심히 해야겠네요 ㅎㅎ
댓글 달기