如何创建守护进程
如何在Linux下创建这样一个程序,执行之后返回shell,但程序本身驻留在内存之中继续执行?其实很简单,创建一个子进程,然后父进程结束即可。例如下面的Perl程序:
#!/usr/bin/perl
exit if fork(); # 创建子进程,然后父进程退出
while (1) { sleep 1; } # 测试用死循环
不过需要考虑到一点,守护进程通常在系统启动时以root身份启动,但是由于安全问题,通常并不以root身份运行。这一点使用perl如何实现呢?可以使用下面的 sudo 函数。
sub sudo {
my ($user, $group) = @_;
my $uid = (getpwnam($user))[2];
my $gid = (getgrnam($group))[2];
($(, $)) = ($gid, "$gid $gid");
($<, $>) = ($uid, $uid);
}
所以,一个基本的守护程序应当这样写:(sudo函数代码省略)
#!/usr/bin/perl
&sudo("myuser", "mygroup"); # myuser、mygroup为启动守护进程的用户和组
exit if fork();
while (1) { sleep 1; }