linux下控制台程序的问题,分数可以要多少给多少 ( 积分: 100 )

  • 主题发起人 主题发起人 oldhorsejs
  • 开始时间 开始时间
O

oldhorsejs

Unregistered / Unconfirmed
GUEST, unregistred user!
我在linux下用kylix建立了一个控制在程序在DOS界面下运行,用的是indy控件(主要是indytcpserver,indytcpclient,indyecho),但是非常奇怪的是,我程序一运行就会出现多个进程(用ps命令列出),名字都是一样,而且越来越多,最后可能会导致Thread creation error: 资源暂时不可用等错误,请教各位大虾,会不够可以加,要多少给多少(只要我的分数够给,呵呵)
 
我在linux下用kylix建立了一个控制在程序在DOS界面下运行,用的是indy控件(主要是indytcpserver,indytcpclient,indyecho),但是非常奇怪的是,我程序一运行就会出现多个进程(用ps命令列出),名字都是一样,而且越来越多,最后可能会导致Thread creation error: 资源暂时不可用等错误,请教各位大虾,会不够可以加,要多少给多少(只要我的分数够给,呵呵)
 
刚开始还不会出现这种情况,会不会和我本身的程序有关,或者和linux内核版本有关
 
你遇到的问题非常正常,因为LINUX是没有线程概念的(有个类似的LWP,轻量级进程)
SOCKET监听的时候,是对每一个连接有一个线程/进程来维护的,这就是你为什么看到多个同名进程的缘故
至于如何解决此问题,主要是在适当的时机回收资源(进程也是操作系统资源),同时,你要考虑IPC问题。
 
刚才我查了一下资料linux内核版本为2.6以上的是存在这个问题,机制变了它基于一个1:1的线程模型(一个内核线程对应一个用户线程),问题是用户连接的时候操作系统可以检测到怎么创建了一个进程(线程),但是用disconnect方法把这个连接主动断掉的时候,为什么就检测不到了,难道还要专门写程序来清除操作系统进程?
 
为什么我的程序里的线程free掉了,但操作系统里还有,为什么,真的没有人知道吗 [:(]
 
太难了,顶一下
 
为什么用netstat查看时,该释放的外部连接都释放了,但操作系统建立起来的相关进程没有释放,谁能够解答,不胜感激!
 
to 沙隆巴斯的主人:
主要是在适当的时机回收资源(进程也是操作系统资源),
应该怎么做???
 
我在其它论坛上也看到过类似的帖子,但都没有人回答,难道国内真的没有人知道???
盼望高人出现!
 
接受答案了.
 
后退
顶部