LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1667|回复: 6

为什么exec使用新PID启动一个进程?

[复制链接]
发表于 2006-1-11 10:23:07 | 显示全部楼层 |阅读模式

  1. #!/bin/sh
  2. _pid=$$
  3. echo $_pid
  4. exec /sbin/syslogd -m 0

  5. [root@LFS0 ~]# ./_test.sh     
  6. 7497
  7. [root@LFS0 ~]# ps aux | grep syslogd
  8. root      7498  0.0  0.4  3468  620 ?        Ss   10:43   0:00 /sbin/syslogd -m 0
  9. root      7500  0.0  0.3  5596  516 pts/0    R+   10:43   0:00 grep syslogd
复制代码

但是 man 手册说:"If command is specified, it replaces the shell. No new process is created."

请问这是为什么呀?

谢谢
发表于 2006-1-11 10:55:39 | 显示全部楼层
这取决于你执行脚本的方式,
./urscript的话,那个exec没什么用
. ./urscript的话,你试一试 ^_^
回复 支持 反对

使用道具 举报

发表于 2006-1-11 10:55:41 | 显示全部楼层
$ ps f
PID TTY      STAT   TIME COMMAND
12654 pts/1    Ss     0:00 /bin/bash
12667 pts/1    R+     0:00  \_ ps f

$ bash

$ ps -f
  PID TTY      STAT   TIME COMMAND
12654 pts/1    Ss     0:00 /bin/bash
12676 pts/1    S      0:00  \_ bash
12689 pts/1    R+     0:00      \_ ps f

$ exec bash
$ ps f
  PID TTY      STAT   TIME COMMAND
12654 pts/1    Ss     0:00 /bin/bash
12676 pts/1    S      0:00  \_ bash
12722 pts/1    R+     0:00      \_ ps f

我的实验结果证明这句话是正确的。

你的文件我也运行了,没问题,不过我只是把他改为运行 ps 命令了。结果显示,两个PID是一样的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 11:11:54 | 显示全部楼层
可能是daemon的原因。那如果我想在inittab里面设置使用respawn来监视一个daemon该怎么办呢?

我在 "The Linux Enterprise Cluster" 这本书上读到可以用这种办法。

或者有什么办法可以在脚本中预先得知或设定将要调用的daemon的PID,这样可以进行监控,如果daemon意外退出,则自动重启之?
回复 支持 反对

使用道具 举报

发表于 2006-1-11 17:38:54 | 显示全部楼层
不可能
pid都是随机的
除了少数几个
如init都是1

如果像这样就简单了
  1. [No.783 17:37:36 ~]$ grep pid /etc/apache2/apache2.conf
  2. PidFile /var/run/apache2.pid
  3. [No.784 17:37:45 ~]$ cat /var/run/apache2.pid
  4. 3478
  5. [No.785 17:38:25 ~]$
复制代码
很容易实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 18:27:29 | 显示全部楼层
我查了一下,应该是一般daemon(C 语言)会先执行fork(),然后退出父进程,在子进程中调用exec()。

可以使用 pid file。不过我试了一下,也可以用 pidof(killall5) 这个程序.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 18:29:06 | 显示全部楼层
但这就意味着不能使用inittab的respawn了,只能另外写个脚本,放在crontab里面
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表