hdf3598
新新人类
帖子
12
精华
0
无忧币 5210
积分 60
阅读权限 20
|
发表于:2008-4-13 16:21
标题:BootServer 4001
<上一帖 |
下一帖>
我现在要做一个Unix进程管理系统,其中一个功能是,当被监控的进程崩溃以后,进程管理器可以自动重新启动这个程序,(进程管理器是以守护进程的形式出现的)
要重新启动一个进程,必须要做的其中一个步骤,就是要模拟出进程启动时候的环境
譬如说,进程A是用户user_A在 /usr/shacker里面执行 "BootServer 4001"这样的命令得到的,对于进程A来说,工作目录就是/usr/shacker. 当进程A崩溃了,重新启动这个进程,除了要重新执行这个命令"BootServer 4001"以外,按照我的想法,还需要使这个进程工作于/usr/shacker里面
所以我的做法是
int main(){
pid_t pid;
if ((pid=fork())==0)
{
//in child
chdir("崩溃进程的工作目录");//譬如说 /usr/shacker
system("执行崩溃进程的命令行"); //譬如说ls >filelist
}
else
{
}
但发现是不行的,system("执行崩溃进程的命令行")以后,需要重启动的崩溃进程工作目录还是进程监控系统的工作目录,显然是不合理的
怎么解决这个问题呢?thanks
|
 网络虽虚拟,技术无边界,来看看大家“真面目”! |
|
redking
副版主
帖子
2657
精华
0
无忧币 34792
积分 4345
阅读权限 140
来自 (保密)
|
发表于:2008-4-13 16:21
该回复被 hdf3598 奖励 200 点无忧币
此回复于2008-04-13 16:22被 hdf3598 评为最佳答案
system("脚本程序");在脚本程序里面想去哪个目录不行啊。
答2:#include <unistd.h>
#include <errno.h>
#include <stdio.h>
int main()
{
switch(fork()) {
case 0:
if(chdir("/tmp")) {
perror("chdir");
exit(1);
}
system("ls >out.txt");
exit(0);
case -1:
exit(1);
default:
exit(0);
}
}
上面的程序在FreeBSD4.2下通过。另外参考:
fork(), getcwd(), getwd(), chdir(), chroot()等函数的man手册。
|
 “绿色IT 从我做起”圈子有奖活动 |
|