免费注册 查看新帖 |

Chinaunix

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

请问如何解决HP-UX login 进入后无法操作的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-01-16 17:01 |只看该作者 |倒序浏览
我们的HP-UX机器经常出现可以LOGIN进去,但进去后敲任何命令,哪怕是ls都无法得到执行,它会报错“有太多的进程存在”。
这个原因基本清楚了,是我们自己开发的程序的问题。不断复制又不释放资源。每每遇到这个情况我们只能通过GSP讲其电源关掉。

1。不知那位高手,可以提供一个比较温柔的方式,不会对系统造成损害或损害最小?
2。还有除了看syslog外,还有没有其他日志能帮助我们分析这种问题的原因?
3。有什么办法可以通过对unix系统的设置,让它保留必要的资源给shutdown用吗?

问题太多,不胜惶恐,多谢多谢!

论坛徽章:
0
2 [报告]
发表于 2002-01-16 20:51 |只看该作者
kernel parameter : NPROC
I think you could modify it biger and check again.

论坛徽章:
0
3 [报告]
发表于 2002-01-17 02:14 |只看该作者
check if there is any \"defunct\" running background..
e.g. ps -ef|grep defunct

If so, ask the developer to correct the program.

论坛徽章:
0
4 [报告]
发表于 2002-01-17 09:41 |只看该作者
最初由 cheungpaul 发布
[B]check if there is any \"defunct\" running background..
e.g. ps -ef|grep defunct

If so, ask the developer to correct the program. [/B]


多谢楼上的两位朋友。不知能否详细的解释一下defunct。

论坛徽章:
0
5 [报告]
发表于 2002-01-17 10:00 |只看该作者
unused and non-function child process generated by the parent! They may eat up all your resources!!

论坛徽章:
0
6 [报告]
发表于 2002-01-18 09:32 |只看该作者
就是通常所说的僵尸进程,解决方法有二:
1. 设置一关机用户,登陆后即将系统重新启动(治标不治本);
2. 僵尸进程根本上还是程序设计的问题(呵呵,这个嘛.......)。

论坛徽章:
0
7 [报告]
发表于 2002-01-18 09:40 |只看该作者

(转贴一篇有关僵尸进程的文章)

在Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。
     我们知道,每个Unix进程在进程表里都有一个进入点(entry),核心程序执行该进程时使用到的一切信息都存储在进入点。当用ps命令察看系统中的进程信息时,看到的就是进程表中的相关数据。当以fork()系统调用建立一个新的进程后,核心进程就会在进程表中给这个新进程分配一个进入点,然后将相关信息存储在该进入点所对应的进程表内。这些信息中有一项是其父进程的识别码。当这个进程走完了自己的生命周期后,它会执行exit()系统调用,此时原来进程表中的数据会被该进程的退出码(exit code)、执行时所用的CPU时间等数据所取代,这些数据会一直保留到系统将它传递给它的父进程为止。由此可见,defunct进程的出现时间是在子进程终止后,但是父进程尚未读取这些数据之前。利用这一点我们可以用下面的程序建立一个defunct 进程:

#include <stdio.h>
#include<sys/types.h>
main(){
if(!fork()){
printf(“child pid=%d\\n”, getpid());
exit(0)
}
sleep(20);
printf(“parent pid=%d \\n”, getpid());
exit(0);
}

      当上述程序以后台的方式执行时,第8行强迫程序睡眠20秒,让用户有时间输入ps -e指令,观察进程的状态。当父进程执行终止后,再用ps -e命令观察时,我们会发现defunct进程也随之消失。这是因为父进程终止后,init 进程会接管父进程留下的这些“孤儿进程”(orphan process),而这些“孤儿进程”执行完后,它在进程表中的进入点将被删除。如果一个程序设计上有缺陷,就可能导致某个进程的父进程一直处于睡眠状态或是陷入死循环,那么当该子进程执行结束后就变成了defunct进程,这个defunct 进程可能会一直留在系统中直到系统重新启动。
     如果我们将上述程序略作修改,在第8行sleep()系统调用前执行wait()或waitpid()系统调用,则子进程在终止后会立即把它在进程表中的数据返回给父进程,此时系统会立即删除该进入点。在这种情形下就不会产生defunct进程。
     由于调度程序无法选中Defunct 进程,所以不能用kill命令删除Defunct 进程,惟一的方法只有重启系统。

论坛徽章:
0
8 [报告]
发表于 2002-01-18 09:46 |只看该作者
嘿嘿,这个问题我遇到过。
我曾做过一个小程序,后台以特权用户身份,监听普通用户发送的消息队列,如果收到,就将自己复制一份去执行指定的命令,而自己继续监听。发现经过一段时间后会出现一堆defunct进程,原因就是被复制的进程没能够完全退出。我请教我们这里的开发人员后,他们告诉我应该后台复制自己后,新程序去监听,而老程序去执行指定命令,然后退出。
问题解决。
也许对你有些帮助。

论坛徽章:
0
9 [报告]
发表于 2002-01-18 10:53 |只看该作者
my past experience ... it cause total outage of servers.. and u cannot kill the defunct process until the system is down....

The solution is:
U must tell the developer guy to fix the problems...

clunix, have u fixed the problems yet?

论坛徽章:
0
10 [报告]
发表于 2002-01-18 13:51 |只看该作者
我想我清楚了。多谢各位的帮助。我已经将情况告诉了我们的开发人员,现在只有等待。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP