免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1559 | 回复: 9
打印 上一主题 下一主题

How to get pid with last process in background? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-26 02:48 |只看该作者 |倒序浏览
I know this problem already ask by anybody more and more days ago.but i couldn't find it now.

if a.out is the daemon process last running. now i want to get the process id with it. there is 2246.

$ ./a.out &
[1] 2246


Thanks a lot.

论坛徽章:
0
2 [报告]
发表于 2003-07-26 12:11 |只看该作者

How to get pid with last process in background?

是要生成pid文件吗?

论坛徽章:
0
3 [报告]
发表于 2003-07-26 14:24 |只看该作者

How to get pid with last process in background?

是的,是的。我有一个服务器程序不生成pid文件,我想用shell包一下,能用myproc.sh start,myproc.sh stop之类的东西来启动和停止它。应该怎样作啊?

论坛徽章:
0
4 [报告]
发表于 2003-07-26 15:16 |只看该作者

How to get pid with last process in background?

给你一个现成的,把文件名改成你的服务名,再把CMD变量改成你的启动命令,最后把MATCHLEN改成命令行的适当长度(不超过80)就ok了



  1. #!/bin/sh                       
  2.                                 
  3. # Startup Agent [statup_module.sh].
  4. # YUHONG 2002-07-09            
  5.                                 
  6. # !!! Warning !!!               
  7. # modify filename to your services name
  8. # modify CMD to your command line.
  9.                                 
  10. CMD="/usr/local/bin/tcpserver -R -H 0 cvspserver /usr/bin/cvs -f --allow-root=/var/cvsroot pserver"
  11. MATCHLEN=40

  12.                                              
  13. PROC_NAME=`basename $0 .sh`     
  14. PIDFILE="/var/run/${PROC_NAME}.pid"
  15.                                 
  16. ifrun(){
  17.         if [ -f "$PIDFILE" ];then
  18.                 PID=`cat $PIDFILE`
  19.                 if [ -n "$PID" ];then
  20.                         pscmd=`ps -o command -p $PID|sed -n 2p`
  21.                         if [ -n "$pscmd" ];then
  22.                                 d=`expr "$CMD" : "$pscmd"`
  23.                                 if [ $d -gt $MATCHLEN ];then
  24.                                         return 0;
  25.                                 fi
  26.                         fi
  27.                 fi
  28.         fi
  29.         return 1;
  30. }

  31. case "$1"
  32. in
  33. start)
  34.         ifrun && { echo "Another $PROC_NAME already running."; exit 1;}
  35.         $CMD &
  36.         :
  37.         echo $! > $PIDFILE
  38.         echo -n " $PROC_NAME"
  39.         ;;
  40. status)
  41.         if ifrun;then
  42.                 echo "$PROC_NAME STATUS: RUNNING"
  43.                 echo "COMMAND: $CMD"
  44.                 echo "PIDFILE: $PIDFILE"
  45.                 echo "PID: `cat $PIDFILE`"
  46.         else
  47.                 echo "$PROC_NAME STATUS: STOPED"; exit 1
  48.         fi
  49.         ;;
  50. stop)
  51.         ifrun || { echo "$PROC_NAME not running.";exit 1;}
  52.         /bin/kill -KILL `cat $PIDFILE` 2>/dev/null
  53.         rm -rf $PIDFILE
  54.         echo "$PROC_NAME stoped"
  55.         ;;
  56. *)
  57.         echo "`basename $0` status|start|stop"
  58.         ;;
  59. esac
  60. exit 0
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-07-27 14:42 |只看该作者

How to get pid with last process in background?

good. 能用了。没改那个MATCHLEN
不明白那个MATCHLEN是什么意思啊?大虾请指教

论坛徽章:
0
6 [报告]
发表于 2003-07-27 20:41 |只看该作者

How to get pid with last process in background?

[quote]原帖由 "夜未眠"][/quote 发表:
   
MATCHLEN改成命令行的适当长度
MATCHLEN=40
所以MATCHLEN就是给命令行匹配适当长度

论坛徽章:
0
7 [报告]
发表于 2003-07-27 20:57 |只看该作者

How to get pid with last process in background?

原帖由 "grljt" 发表:
CHLEN=40
所以MATCHLEN就是给命令行匹配适当长度
   

还是不太明白,“命令行匹配适当长度"是什么意思,还有为什么不超过80?

论坛徽章:
0
8 [报告]
发表于 2003-07-27 21:05 |只看该作者

How to get pid with last process in background?

是屏显紫有80列,如果超出你就不能看到第80列之后的内容(即不能自动折行).(可更改机器设置增大宽度,但字体就很小了,具体那个列数记不清了,)

论坛徽章:
0
9 [报告]
发表于 2003-07-27 21:17 |只看该作者

How to get pid with last process in background?

哦,刚才才发现命令行太长ps无法显示全部,明白一点儿,那个MATCHLEN是不是就相当于一个精度值啊。比如说系统中有./a.out 123和./a.out 456这个MATCHLEN就起码要选10才能分开这两个进程。这个MATCHLEN就是干这个吃的是不是啊?哇,还不是很笨。谢谢grljt

论坛徽章:
0
10 [报告]
发表于 2003-07-28 11:14 |只看该作者

How to get pid with last process in background?

[quote]原帖由 "ohai"]哦,刚才才发现命令行太长ps无法显示全部,明白一点儿,那个MATCHLEN是不是就相当于一个精度值啊。比如说系统中有./a.out 123和./a.out 456这个MATCHLEN就起码..[/quote 发表:
     

就是这个意思  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP