Linux网络服务器/客户进程的实现
发布时间:2024-08-29
发布时间:2024-08-29
linux 守护进程
维普资讯 http://www.77cn.com.cn
@2 - 0 l“‘『第 1卷第 3 2期20 OO年 9月. . 0
塔里术农垦丈学学报o Tt U f mm订o f^ Re m l da i ̄
v l№ . d 2 3 S .2 o 单 0o
Lnx网络服务器/ i u客户进程的实现T { P 1 0
年,——●一
梅陈苏丽z/、李新国,-—— _ _一
(塔里木农垦大学农业工程学院 . 1新疆阿拉尔
830 ) 430
(塔里木农垦大学校办档案室, 2新疆阿拉尔 830 ) 430摘蔓本文讨论了在 Lr i ̄下利用 Sce编写服务器t a okt客户机守护进程的一般方法和原理 .以及由该守护进程创建
后台子女进程和前古子女进程的方法、步骤。
关字键中圉分类号
堂^芏、墨一寺迎 窆竖里兰,士极T 330 P9 .3
Lu是 UI ix n NX的一种免费版本,其网上功能强大,安全性能强,因此受到用户的欢迎。在 1 u中 . x i n内置了 T PI协议, CI P利用此协议中的 Sce接口可以自己缩写一些功能较强的服务器进程和客户进程 o t k的程序来实现网上数据的交换。
在网上大量使用了客户机t服务器模式,在此模式中,由一些进程来实现一组服务,它们运行在用户 态,为服务器。服务器的任务是检查是否有客户的服务请求,被称在满足客户的请求之后返回。丽客户是一个应用程序,如果它需要服务,就发出请求服务的消息。网上大量使用的卸,喊等采用的就是讪这种客户机,服务器结构。 在客户程序和服务程序利用 T P℃通信的情况下,服务程序通常将打开它的连接端并且被动地等待连接的到来。而客户程序在打开到服务程序的连接中将扮演主动的角色。一
旦两个进程之间的 T P Sce连接已经建立, C— okt s连接的端点将象普通的 La文件一样被对待. il rx
使得象 f d ) e (和 (之类的系统功能调用能被用于传递数据。为了使这一点成为可能,似于普通 8 )类文件要由文件描述符与它结合在一起一样 .okt Sce也有描述符和它结合在一起,okt Sce描述符并不自动地与规定的目的地址联系在一起,而必须由系统调用将描述符与目的地址进行结合。因此 sce 0kb中提
供了一些系统调用来创建 a e, s kt t o e描述符与本地地址结合,将 c进行连接请求 .等待连接等 .
利用这些系统功能调用能随意编写一些适用于自己的后台服务器/客户进程。由此给自己的工作带来一些方便。
1 Sce接口所用到的系统功能调用 o kt使用 Sce接口缩写网上连接程序所用的系统功能调用主要有如下几个: o t k 11创建一个 Sce。 . okt其格式是: s s=sce( ml, p .roo) d oktf i t epo c1 a yy t 其中由地址类( i )缸口y参数指定该 Sce使用的地址类。由类型( p ) l okt t e参数规定所请求的通信类 y型。协议 ( ̄o ) p e参数一般为零, d使得默认的协议将自动被选取。 12连接本地地址 .
本系统调用的主要功能是完成将一个规定的地址与一个 Sc t结合 . ok s e一个服务进程要使用如下①收蒋时期:0o 0— 2o . 3
linux 守护进程
维普资讯 http://www.77cn.com.cn
第3期
年梅等:i z L a网培服务器, n客户进程的实现
b1(系统调用: id ) l b ds,dr sad e) i (dade .ddl n s 1
其中,参数是由 sce ) s d okt调用返回的 Sce描述符。A d s指向一个地址结构 . d e参数规 ( ok s t dr s e a rn dt定了地址的字节长度。 1客户避疆奠接到眼务进程 . 3使用此累统功能调用实现客户进程对服务进程连接的初始化。此系统调用是:c m吐(dad ∞ e弓, m ̄, d ) 其中,是本地 Sce的 Sce描述符。A d s规定在目的机上服务进程正在使用的地址,d s d ok s okt t s dr s e a—
d o规定了地址的字节长读。 aa t 当作 c- c ) 0 I系统调用时,—,(如果客户的 S kt还没有结合到一个本地地址,系统自动选择一个 oe c s则本地地址和一个适当的端日,号并且把它们和该客户的 S kt相结合。 oe c s14设 t服务毽序 .一
旦服务进程已经用 sce ) b d ) ok (和 i (系统调用来创建它自己的一个 Sc t并且把一个本地地址 t n ok s e
和端日和该,ce相结合, S kt o s则它需要设置 S kt使它能接受进来的连接请求。L t (系统调用被用 oe c s ie ) sn来执行此功能,其格式为:tt (dqe) ie s.l sn n
其中,是 s kt调用返回的描述符,l s d o e) c ( q n是许可的队列大小, e被用来决定客户
连接请求的最大数。
旦 Sce已经以这种方式设置, o t ks现在服务器仅需要等待一个连接,为做到这一点,它使用了 . eg ) e (系统调用: l一
nw d= ets .d r s ad e ) e s∞cp(d ad s,d dn e
其中, d s参数是和服务器 Sce相连的 Sce描述符。A d s参数是指向一个 Sce地址结构 o t ks o t ks dr s e o t k的指针,由 a et)它将 c p(调用填人。当建立连接时, c和客户的 Sce结合的地址和端口号将被填人这一 okt地址结构。从 a et) c p的返回值是一个新的 Sce描述符, c ( o t ks它具有所建立连接的客户作为它的目的地, 并且它将被用于今后和那个客户的通信。
2守护进程守护进程是一种在后台运行并且独立于所有终端之外的进程,这些进程执行中的信息不能在任何个终端上显示,同时这些进程也不会被终端所产生的中断信号所打断。这在安全性中非常重要,因此 L u中大量的网络服务进程都被做成守护进程。根据笔者的经验, ix n以下是生成一个守护进程的基本步一
骤:
2 1关闭文件描述符 .
第一项任务是关闭所有不必要的文件描述符。如果在守护进程中有打开的普通文件,则该文件不能被其它进程从文件系统中删除,该文件所在的文件系统也不能被卸下。要关闭文件描述符以下的代码可以使用:#icu e n ld<ssprm . y/ aa h>
f (=0 i O IE;+i o i;<N FL+ ) r
d ()鹏e i; 2 2甩开控制终端 .
如果守护进程有控制终端 .则它可以接收由该控制终端所产生的信号,如果这些信号不被俘获,将结束该进程。因此必须使守护进程与其控制终端分离开,完成此任务的代码是:
linux 守护进程
维普资讯 http://www.77cn.com.cn
塔里丰农垦大学学报
第 1卷 2
i( f坩=oe (/e/y, -,WR ) ( p n”dvt” D P t D ) )=0 ) i d f, IC O r O; o ( TO N T Y,) c d c s( ) lef; o d
23脱离对话过程和进程组 .
若守护进程属于一个对话过程和一个进程组,它将接收作为整体发送给该对话过程和进程组的信号。这类似于从控制终蜡接收信号 .因此必须将守护进程与对话过程和进程组分离开。L u i x中用 n ss (系统调用可将进程和它的当前对话过程和进程组分
离开, ei ) td并且把它设置为新的对话过程的颁头进程。s把d ) ei的副作用把进程和它的控制终端分离开。但该调用的问题是当该守护进程不是对话过 (程的额头进程时它才能发挥作用,但我们不能保证这一点,因此必须要有确保该进程不是领头进程的机制。要完成此目的仅仅只需要按如下程序执行 fk ) o (调用, r然后在双亲进程中执行 e t)并且在子女 a(, l进程中执行 s s (: ei ) tdi触 () f ( ) ei 0; x ( ) t std ) e i(; s
即使如此,还没有彻底解决J题,司这是因为当一个没有控制终蜡的对话过程的领头进程打开其本身还不是一个对话过程的控制终端的终端设备时,该终端自动变成新的对话过程的控制终端。解决方法是第二次执行 fk ) o (及再次结束双亲进程来完成。这样就留下一个不属于原始对话过程和进程组的子 r女进程,它没有控制终端并且也不可能重新获得一个控制终端。所要求的代码段如下所示:H () k)
ei0; x( ) tstd ) e i(; s i I( ) f )【) (‘’
ei 0; x ( ) t
24处理 SG H D信号 . IC L
有时守护进程要创建子女进程,由双亲进程循环接收更多的连接,而子女进程服务客户的请求。这时,双亲进程不执行 wi ) a(系统调用等待它的子女进程的结束, t默认的.这些子女进程将变成— e直,到将来某个进程等待它们为止。在这种情况下 z 'e ̄J将浪费系统资源。在 L u中可以用将 SC H D mb i ix n IC L ,信号的操作设置为 S,G I- N的方法来绕过这一问题: CI8 nIS C L SC IN; i日( I H D,I- )目 G,G
3守护进程创建前台的子女进程 后台服务进程需要创建子女进程并由子女进程来完成它的服务功能,而该进程本身继续等待接收别的客户的请求,由于其子女进程继承守护进程的信息,以这些子女进程也使守护进程。有时该守护所进程需要根据需要创建前台子女进程。这时要解决的主要间题是如何将一个守护进程转化为一个普通进程。
根据守护进程实现的原理、方法,可知使该子女进程属于一个新的进程组且给它分配一个控{终 6 j端即可实现此目的。因此实现它的主要步骤是:31给该进程创建一个新的对话过程, .使用的语句是:掌 icu e<u it
h> n ld nsd.
linux 守护进程
维普资讯 http://www.77cn.com.cn
第3期# icu e<s s t e . n ld y/ p s h> y
年梅等:i x L u网络服务嚣, n客户进程的实现
p- it d
s s (o ) a i vi d d
由该段程序可创建一个新的对话过程,它包含一个新的进程组,该子女进程是该新的对话过程核心进程组的领头进程,但此时该进程还没有控制终端。32给该子女进程分配控制终端 . 可使用以下格式:f=oe (/e/y” O R WR; d pn”dvt N, - D ) t
dpf) u(d;d p f) u (d;
其中 N代表的是控制终端号该控制终端应该是一个不属于其它对话过程的控制终端。 使用以上方法,我们在 1 u下可以任意编写自己的 Sce后台守护进程, . x i n okt s该后台守护可剖建自己
的后台子女进程。也可以根据需要创建新的前台子女进程。由此可自如地在网络上自己编写各种各样的服务器,户进程。客
下面是笔者自己利用 Sc t系统调用编写的一个 L t ok s e i=下的后台服务程序的清单: n#i c d ( s i h) nl e u t o. d#icu e<s g. nld晡n h>#icu e<s r 1 h> n ld i1. a
# icu e<fn h> n ld e d.
#i l e<∞咖 nu cd#icu e< n ld
,> h
p Hm. 日 h>
#d f . e me NA酣匪『 A T 1 IR l#d f e N E T e i A- XI n 0
j b r f; H -u l ev
啪)H lc e sut{ c ts u ts e a d - i; t c o k d ri sn r n its d n; n i e r
it岫枷 a; n gm 't d: s
{ O‘: S C} l
S C E O K T s; p
it s n d;
st dem (; e ̄ an )
s n (IC L,I- N;/ i a S .H D S,G ) gl C CI *将 S C L I H D信号的操作设置为 S,G G I- N CI(p:spn ):= ) t生成一个 Sce描述符 s oe() 0 * okt( Sp )hm !、, A E I)” 0∞( r! N -X T; t ( )坤∞v
*,
*/
linux 守护进程
维普资讯 http://www.77cn.com.cn
塔里木农垦大学学报
第 1眷 2
/ f r ̄ * l w" f用来使 s与本
地的地址和端口 3 e p 0相连,并且使用 a e (调用等待客户的连接 cp ) ctf(;{ o; ) r i (d=s r ̄ s,0 SD L Y)一 f 8 s v (p 3,-E A ) ( ee f ̄( Err !、竹 N X T; a”r ! t o n, A E I) 1 )
sih fk ) wt ( r( ) c o∞ s: e0
d- r c( )/ 进行接收数据并且创建一个前台的子进程 os v es; * ei dtO: ()cs日e— l:
*/
c ̄ ( ) l es;, d f ̄(fk ),AR SA ̄) a” r(”N -ET t; t od fut ea l:
tO{ ( )} c s(d; l e 8) o
, 该函数的主要作用就是将该进程设置为守护进程 *8h . ∞(0 ) e l也l p vj d
m t l ;
(=;< O I; i j 0i N F E++ ) Lc s () l e i; o
/先关闭所有的文件描述符 **,
*/
s t ( r() v c f k) i fh oc B 一 1: ae
,甩开对话过程和进程组 *
fa e pde o( .s a l st -am n ) 1 (”N xr; t( u t ),A E r)d fu t ea l
ei O; x () tc5 a e0:
is d ) f ̄i… ( (si h f k ) wt (o ( ) c rc s一 1: 8e
1 )
f (stp如 m (, b d),AE I)“”e . u )g o(”N .XT; e
f ̄(su-am n )2dfk ),A E 1 a”e pde o( .n n(” N -XT) t t od fut ea l:
e t0; ( )
linux 守护进程
维普资讯 http://www.77cn.com.cn
第3 期 cs:日e 0
年梅辱:
罔络服务器信户进程的宴现
m k0; ̄ ()
/-该函数用于显示错误信息 g fa(hrgetit ete ̄) a lca - x, x- f t t t n n aipi” r i Il E l n%s n, )、”曲;nx at n=N - E R ) e t co; -i AR b ̄A T
*/
k g p∞v1; m i (,) mes l e
ei 1; x ( ) t
#df eFt(,) en a ln1 i ad- rc(n ) os v e i s ei tdFL - IE g如;8 t n i ti, ci t d;0: ̄ piti n;
fpl ̄f,%
s n,)fa(,)} rt p”、”1; t…’1; f n(" al 1g, -
,该进程用于接收从客户机上传递的数据, *并创建一个前台的子进程
c a *d t; hr a a
ca a l[ r E] hr me a Bl N; e Lu sg e m. ln n in d l, e; g
(娜∞(t m/i/ rf””r)== )如=”h en ne .e。w” ) 0 o a xiFt ( oe ll、” N— XT; a l”pnfe I n, A E I ) a i
f ̄,(,teSL fd I、") p t f” tt fe ! 1; fp h l o r 1 ”/ 从客户机上接收长度为 nml各自接的数据 *日衄 i r ds,m de,r E )-’-1 f e (d n n a BI N (a L ) Ft (t n『、”N .XT; a l” el I n, AE I) a h e i p fr( )} i f” o, a e rcs f i ok ) pa (Nw i t r oes!、”; ( d= l nfh p n )c ni u; o t e n
*/
}l I ee std i f,:
pn( a a a”、 1%w, hl ici n d蛐 i(; d ) f (;0 i O IE++i o i;<N F; r L )
!、") 1; 1 ”
c s() lei; of:oe (/e/y” O R WR) d pn”dvt7, - D t:
linux 守护进程
维普资讯 http://www.77cn.com.cn
塔里木农垦大学学报
第 l卷 2
do f) u (d; d p f) ̄(; 1 e∞v( e娜,,) 00; F t ( ee e O!\1, A E I) a l”)c l[ ! 1 N .XT; a【 T -”
c ( ) l ;∞eS C E s e (o ) O KT o n vi p dS C E B; O K T口
i (=(O K T *)] c s efS C E ) ) f叩 ( SC E mao(i o(O K T )::0 l z )rhrI NI; e| r S L
(p>s oktA - E,O K S R A 0 ) s一 d=sce( FI T S C -T E M,)一 Nf e叩) r (; er Hl NI e l S L; l q
1 )
叩一>s l=s e (p一>s ) ie i d 8 nn z i n单一>bnⅡ= sRE E; id昭 - S Tram p; e s
i le ̄ n sc ( tcsi I d r: Is
叩)
s=
叩一>s; d d
f e s) r (p; e r unc B(d e r 0e s) t l
参考文献1周明天 .汪文勇编著 .C/ T PI P网络原理与技术北京:清华大学出版社, 9 13 9 2[]a ( m s .寿彬等译 .从入门到精通 .英 Fi k e薯童 l l I电子工业出版社 . 9: 8— 6 1 8 1 37 9 7 3李卓桓,曩华等编著 .La L,x网络编程 . r电子工业出版社,0 2∞ 4 D IG^ EE.O E . t ̄ ( I s C M R]e U nnC mp t ̄s i咪 o uc ce
wt T P口 V lI: i C ! o h
j,reo, dAcic r,T r d, p Pe cl s rhet e l dE i k c sa tu d临∞一叫 Itm ̄ o a。 ne nl
m etf I 0 I Ie a, n r l tn s
P mdu ic t etI/y ̄ .I 4 9 7, eUnv ̄i W s zae e N 7 0 y
5 D U, E E C M R sdD V ) .SE E S ne to i i C/ dⅡ: O CAS . O E n A K L T V N,It w r n w hT PI I me k g t PV峋S cn E ̄o .御 r眦呲 0 C ̄p trSin e ud eU ie t Wet ea d d n h f c ue cecsP ru n ̄ml y s 艘 .I4 9 7 l e N 70。
, p衄 l
帆,
∞一 H f It f ml Ic a ne i t ma o,n .
6 D U L S .O I O G A EE C M ̄Hal I m II№ - . c I . n
D V L SE E SIt A K) . T V N, e n ̄
rn i C/ d m:lI一Sre I k gwt PI i hT PV ciI e r哩㈣ l A dA p ̄ . e【 v P嘴 n ptS ine mdu ledy c c sP e eUnvn t h .I4 9 7 ll e— N 7 0,Pe ̄C r o
1 m S ok t eso eo dE io,D g te t f 0 i B D S ce rinSc n dt n cmr n o o V i m c
(下转第 2 9页)
linux 守护进程
维普资讯 http://www.77cn.com.cn
第3期
橱明超等:中棉所 3在 4团的生育表现及丰产栽培要点 5 2
232合理化调 ..
中棉所 3株型清秀, 5赘芽少,对缩节胺敏感,化控量要适当减少,具体用法还有待于进一步研究。 233揭膜、 .开
沟、灌水在时间上要衔接好中棉所 3在 4团表现较耐旱, 5 2第一水水情不正常时,要注意揭膜不宜太早,不揭膜情况下。在头水可推迟到 7 1左右,月 0日对产量影响不大,沙性地头水不宜太晚。 234做好整枝、工作 ..打顶中 3油条细小, 5赞芽少,便于管理,打顶一般在 7 1月 5日左右开始,月 2 7 0日结束,高度保持植株在 6 7 e。 5 5r n
中棉所 3前期生长较慢, 5中后期生长稳健,田间通风透气条件好,害虫发生很轻,该品种抗病性强,病害发生程度轻,化防费用较低。
综上所述,中棉所 3早熟性好, 5此特点可有效降低 4团冬灌早对拾花质量和进度的负面影响。同 2 时该品种具有一定抗旱性,可缓解 4团河灌区水情不稳的矛盾, 2特别是中棉所 3 5内在品质如 25 .%跨长。,比强气织品质较好,目前农三师推广中棉所 3号面积较大的有 4团、l 4 5 9 5团、2团。累积面积已上万亩,表现出良好的推广价值。
参考文献1刘正德 . .等棉花新品种中棉所 3的选育与应用技术中国棉花 .99 2 (】:8 2 5 1,0 1)2— 9 9
(上接第 2 6页)
Re l a o fLi u t r S r e/le tPr c s a z t n o n x Newo k e v r cin o e s i i
Nin M e C e ui L ) n g o a i h n S l i( u 。 i
(Isi t f gi l rl n i ei, 1 tueo r u ua E gn r g n t A ct e n
。 r U i ri f gi l rl el i . l ii g830 ) r j n esyo ru ua R c mt n Aa Xna 430 a m v t A c t a o r jn ( Pe i n fc T r U i ri gi l rl el i, l ii g830 ) 2 rs e t i ai n es o A r u ua R c mt n Aa Xna 430 d Of e, m v t f y ct a o r jnA嘲 1 p 叩口 i心 d n。慨 adm n o f印釉咄 ted h a por s n r e i gs u 小 mⅨ
S c e.I as i ussh w t raetee n rcs nteb e ̄ u do h oma} po麟 . o k t t lods s o oce t h l po esi h ak c e i f n rten r lc
I loKe o d L m S c e;凸Ⅱ rc s; e v r yW r s k x; o k t D e m P o e s S re