您的位置:首页 > 运维架构 > Linux

linux自制守护进程

2016-05-08 12:37 411 查看
C语言里,只能由父进程派生子进程 ,而不是由子进程的子进程派生

ps -ef

源头进程是init

c里面

创建一个与原进程完全相同的进程,原来的进程成为新进程的父进程

需要引入头文件

<unistd.h>

fork();

C语言里,只能由父进程派生子进程 ,而不是由子进程的子进程派生

代码如下 :

#include <stdio.h>

#include <unistd.h>

int main()

{

    int pid;

    int i;

for(i=0;i<4;i++)

{

  pid=fork();

  if(pid<=0) break;

}

printf("start\n");

sleep(20);

printf("end\n");

}

ps -ef | grep god_me

=====================================================

变成守护进程

#include <stdio.h>;

#include <stdlib.h>;

#include <unistd.h>;

int main()

{

  int pid;

  pid=fork();

  if(pid>0)

    exit(0);

  setsid();

  while(1)

{

 

}

return 0;

}

==================================

把自己的守护进程以服务的方式启动

chkconfig 可以用来检查,设置系统的各种服务

--add 增加所指定的系统服务

--del 删除所指定的系统服务,不再由chkconfig指令管理

--level <等级代号> 指定读系统服务要在哪一个执行等级中开启或关闭

先写一个脚本:另存为shenyid

#add for chkconfig

#chkconfig:35 80 10

#description:i am god

#processname:shenyid

/home/god/bin/god_me

然后执行:chkconfig --add shenyid

service shenyid start(假成功)

输出返回值

showage()

{

  echo $1 $2

}

showage 20 40

#返回值

showage1()

{

  return 123

}

showage1

echo $?

#返回值2

showage2()

{

 temp='123'

}

showage2

echo $temp

#返回值3

showage3()

{

  echo '123'

}

temp=`showage3`

#或者这样也行:temp=$(showage)

echo $temp

=======================================================

判断进程是否存在(有个文件当FLAG)

#add for chkconfig

#chkconfig:35 80 10

#description:i am god

#processname:shenyid

PID_FILE="/etc/shenyid.pid"

start()

{

  if [ -f $PID_FILE ] 
then

     echo "god_me is already running"

     else

      echo "123" > $PID_FILE

      echo "start god_me"

  fi

}

stop()

{

   rm $PID_FILE -f

   pkill god_me

   echo "god_me is stoped"

}

# /home/god/bin/god_me

   case $1 in

     xxoo)

     start 

     ;;

    ooxx)

     stop

    ;;

    *)

     echo "unknown"

   ;;

   esac

====================================================================

vi里输入:set nu显示行号

pkill 根据进程名,杀掉符合条件的进程

pkill god_me

pgrep god_me
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: