데몬프로세스 같은 거 죽일 때 프로세스아이디를 쳐야 하는데요. 힘들게 그렇게 하지말고, sh를 사용해서 해봅시다.

항상 올리고 내리는 데몬 프로그램이라면 스크립트로 제작해야합니다.










프로세스 확인하기 (Language : text)
[oracle][/home/oracle/mudchobo] ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   27537 27536  0 10:33 pts/4    00:00:00 -csh
oracle   27639     1  0 10:37 pts/4    00:00:00 fork_daemon
oracle   27641     1  0 10:37 pts/4    00:00:00 another
oracle   27674 27537  0 10:40 pts/4    00:00:00 ps -f
[oracle][/home/oracle/mudchobo]

우선 ps -f를 쳐보니 2개의 데몬프로세스가 실행되고 있습니다. 이것을 프로세스명은 항상 동일하기 때문에 프로세스 명으로 죽여봅시다.

kill_daemon.sh (Language : text)
ps -f | egrep "daemon|another" | grep -v grep | awk '{printf( "kill -TERM %s\n", $2); }' > tmp.$$
sh tmp.$$
rm -f tmp.$$

우선 ps -f를 이용하여 프로세스를 출력한 뒤 daemon과 another를 검색합니다. egrep는 grep의 확장명령어로 정규식을 지원합니다. 여러개의 프로세스를 죽이려면 저렇게 |를 이용하여 추가할 수 있습니다.

그다음 grep -v grep를 이용하여 현재 수행되고 있는 grep명령어는 빼줍니다. -v옵션은 해당 단어는 빼고 검색하라는 겁니다.

그다음 awk입니다. ps -f해서 다음과 같이 나오면 $1, $2 라고 쓰면 oracle, 27639를 가져옵니다. 스페이스공백이 분리자로 작용을 하게 되어서 프로세스 아이디를 얻을 수 있습니다.
oracle   27639     1  0 10:37 pts/4    00:00:00 fork_daemon

저것은 그냥 출력만 하는 것이기 때문에 파일에 저장해서 스크립트를 실행해줘야 합니다. tmp에 저장 후 sh를 이용하여 실행한 뒤 생성된 tmp파일은 rm으로 지워버립니다.

kill_daemon (Language : text)
[oracle][/home/oracle/mudchobo] ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   27537 27536  0 10:33 pts/4    00:00:00 -csh
oracle   27639     1  0 10:37 pts/4    00:00:00 fork_daemon
oracle   27641     1  0 10:37 pts/4    00:00:00 another
oracle   27756 27537  0 10:45 pts/4    00:00:00 ps -f
[oracle][/home/oracle/mudchobo] kill_daemon.sh
Terminated
[oracle][/home/oracle/mudchobo] ps
  PID TTY          TIME CMD
27537 pts/4    00:00:00 csh
27768 pts/4    00:00:00 ps
[oracle][/home/oracle/mudchobo]


 
Posted by 머드초보

댓글을 달아 주세요

 
데몬이 뭐냐하면 시스템에 관련된 후위 프로세스를 말하는데요. 즉 시스템을 시작하면 시스템에 필요한 프로세스들이 있는데 이것들이 데몬이죠.

telnetd daemon, ftpd daemon, httpd daemon, inetd daemon, squid daemon, sendmail daemon, bind nameserver daemon, routed daemon 뭐 이런 데몬들이 있다는데 어려운건 다 집어치우고, 그냥 쉽게 말해서 계속 메모리에 상주해 있는겁니다. 대신 부모프로세스는 유닉스의 가장 최상단 프로세스인 init프로세스의 ID인 1입니다.

이눔을 죽일 때에는 KILL로 밖에 못죽이는 것이죠.

간단합니다. 그냥 자식 프로세스를 생성하고, 부모를 죽여버리면 돼요-_-;

fork_daemon.c (Language : c)
#include <stdio.h>

int main()
{
        int pid, ppid;
        pid = fork();
        if (pid > 0)
                exit(0);
        printf("%d\n", pid);

        sleep(3);
        while(1){
                printf("daemon!!\n");
                sleep(10);
        }
}

저기서 보면 fork()를 하면 자식 프로세스는 pid를 0을 받습니다. 그리고 부모프로세스는 0보다 큰 값을 가집니다. 그래서 0보다 크면 부모프로세스를 종료시키죠.

종료가 된 뒤에 이 자식프로세스가 유닉스의 최상단 프로세스인 init프로세스의 id인 1을 가져 올 때 까지 기다립니다. 3초간-_-;

그런다음 와일문을 10초마다 daemon!을 출력하도록 시도해봅시다.
그러면 이 프로세스는 백그라운드에서 뜨고 있는 프로세스가 됩니다.

데몬프로세스 실행현황 (Language : text)
[oracle][/home/oracle/mudchobo] fork_daemon
0
[oracle][/home/oracle/mudchobo] daemon!!

[oracle][/home/oracle/mudchobo] daemon!!

[oracle][/home/oracle/mudchobo] ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   26754 26753  0 09:30 pts/1    00:00:00 -csh
oracle   26944     1  0 09:39 pts/1    00:00:00 fork_daemon
oracle   26947 26754  0 09:39 pts/1    00:00:00 ps -f
[oracle][/home/oracle/mudchobo] daemon!!

저기 보시면 부모프로세스 아이디가 1임을 볼 수 있습니다.
 
Posted by 머드초보

댓글을 달아 주세요

 
이게 vi에서는 큰 파일(64mb이상?)을 열 때에는 /var/tmp 폴더가 충분해야 한다고 하더군요. 그래서 무지하게 큰 파일들을 읽을 수 없는데요.

회사에서 로그를 관리하는데 이 로그가 용량이 장난이 아니더군요. 그래서 파일을 열려고 하는데 안 열리더라구요.


해결방법으로 첫번째는 vim을 설치하는 겁니다-_-;
vim은 vi의 개선(iMprove) 버전이어서 기존 vi의 단점을 전부 해결이 되었죠. 그리고 불편한 사항들을 더 편하게 단축키를 제공하죠.

설치가 부득이한 경우는 그냥 실행할 때 옵션을 좀 붙여줍니다.

# vi -y 2000000000 파일이름

저렇게하면 열리더군요.
 
Posted by 머드초보

댓글을 달아 주세요

  1. dd 2011.04.28 15:24  댓글주소  수정/삭제  댓글쓰기

    안열리는데요 ㅠㅠ

 



아이군이 만든 타자크래프트 보고 심심해서 삽질중-_-;




아이군이 만든 타자크래프트도 한번 해봅시다-_-;
자바가 깔려있어야 실행이 됩니다.
http://theeye.pe.kr/typecraft/





폴더에 word1.txt(16단어), word2.txt(32단어), word3.txt(48단어)가 있어야합니다.

word.csh (Language : text)
#!/bin/csh

set words = ( `cat word1.txt` )
set i = 0
set j = 1
set type = 0
set level = 1
set count = 0
@ ii = 4 * $level
@ allcount = $ii * 4

clear
echo -n "[start enter]"
$<
set starttime = `perl -e 'print scalar time(),"\n"'`
echo $starttime

while($level <= 3)
        clear
        echo "level $level"
        while($i < $ii)
                while($j <= 4)
                        @ num = $i * 4 + $j
                        if ($type == $words[$num]) then
                                set words[$num] = "-----"
                                @ count++
                        endif
                        echo -n "$words[$num] "
                        @ j++
                end
                echo
                @ j = 1
                @ i++
        end
        @ i = 0
        @ j = 1

        if ($count == $allcount) then
                set type = ""
                @ level++
                if ($level == 4) then
                        clear
                        echo "all clear"
                        set endtime = `perl -e 'print scalar time(),"\n"'`
                        @ cleartime = $endtime - $starttime
                        echo "clear time $cleartime second"
                        break
                endif
                set words = ( `cat word${level}.txt` )
                @ count = 0
                @ ii = 4 * $level
                @ allcount = $ii * 4
        else
                echo
                echo -n "type : "
                set type = $<
        endif
end

word1.txt (Language : text)
apple
fire
fuck
shit
name
file
print
score
verb
buy
brain
drive
type
path
shot
great
 
Posted by 머드초보

댓글을 달아 주세요

 


 



그냥 심심해서-_-;











gbb.csh (Language : text)
#/bin/csh


set win = 0
set lose = 0
set draw = 0

while(1)
        echo $win win, $draw draw, $lose lose
        echo -n "input gawibawibo(1.gawi  2.bawi  3.bo  q.exit) :"
        set player = $<
        date +%N | cat > rand.txt
        set rand = `cat rand.txt`
        @ rand = ($rand / 1000) % 3
        echo
        switch($player)
                case "1":
                        echo you : gawi
                        sleep 1
                        if ($rand == "0") then
                                echo com : gawi
                                echo draw
                                @ draw++
                        endif

                        if ($rand == "1") then
                                echo com : bawi
                                echo you lose
                                @ lose++
                        endif

                        if ($rand == "2") then
                                echo com : bo
                                echo you win
                                @ win++
                        endif

                        breaksw
                case "2":
                        echo you : bawi
                        sleep 1
                        if ($rand == "0") then
                                echo com : gawi
                                echo you lose
                                @ lose++
                        endif

                        if ($rand == "1") then
                                echo com : bawi
                                echo draw
                                @ draw++
                        endif

                        if ($rand == "2") then
                                echo com : bo
                                echo you win
                                @ win++
                        endif

                        breaksw
                case "3":
                        echo you : bo
                        sleep 1
                        if ($rand == "0") then
                                echo com : gawi
                                echo you lose
                                @ lose++
                        endif

                        if ($rand == "1") then
                                echo com : bawi
                                echo you win
                                @ win++
                        endif

                        if ($rand == "2") then
                                echo com : bo
                                echo draw
                                @ draw++
                        endif
                        breaksw
                case "q":
                        echo exit
                        breaksw
                default:
                        echo illegal choice
                        breaksw
        endsw

        if ($player == "q") then
                break
        endif
        echo
end
 
Posted by 머드초보

댓글을 달아 주세요