Xiaoxia[PG] Yesterday is history, tomorrow is mistery, today is a gift!

27三/102

强大的sed

想把一堆函数函数名通过批处理,写成dummy函数。

23三/104

成功在debian使用无线网络

之前用网络安装的方式在移动硬盘上成功安装了debian5基础版本(安装ubuntu会在checking battery state卡死)。

安装基本系统后,大概只有400MB左右。设置了教育网的源,挺快的。

9二/1011

无题贴图

19十二/0911

php-cgi莫名其妙的崩溃

homeserver通过FastCGI协议与php-cgi进程进行通信来执行php脚本文件。
一直以来都发现php-cgi进程不是很稳定,可能是我在实现协议上有不当的地方。运行一段时间后,例如一两天,phpcgi进程就会自动结束,也不留下任何相关信息。
目前,我通过写批处理文件,在进程结束后自动建立新进程来临时解决这个问题。之前在windows上是写一个批处理文件,然后copy几万行执行命令,这样就相当于无止境地执行。
在Linux上做的更简单,可能是我不知道在windows的批处理里怎么写循环。

#!/bin/bash
while true
    echo "Starting php server ..."
    php-cgi -b 127.0.0.1:8080
    echo "Server exited. Restart it ...t"
    sleep 10s
done

为啥要sleep 10s呢?因为php-cgi进程异常结束了,socket还在占用着8080端口,如果不睡眠一下,那么会耗尽CPU资源,知道端口能够使用。这样可能导致日志文件的体积疯狂增长,直到硬盘资源枯竭而止。。。

4十二/098

原来Linux和Windows下的socket还是有那么多不同的

之前以为linux和windows下的socket都是符合posix标准的,在一个环境下能够正常使用在另外一个环境也没问题。但没想到两者还是有那么多不同。

1.最先发现的是在windows上需要调用那个WSAStartup进行初始化才能使用socket。

2.linux下关闭socket用close,而windows上用closesocket。

3.后来发现shutdown的参数名称不同,windows上用SD_BOTH,linux上是SHUT_RDWR。

4.在linux下如果不正常关闭socket会触发SIGPIPE异常,所以我使用signal( SIGPIPE, SIG_IGN );忽略之。

5.linux下可以使用read,write函数操作socket,也可以使用send,recv。windows上只能使用send,recv?(不考虑udp的sendfrom和recvfrom)

今天又发现一个很大的不同点了,造成了homeserver在短时间内生成了一个20GB的日志文件,用完了vps的硬盘空间。如果一个正在使用中的socket使用close来关闭之而不调用shutdown,则该socket还是处于连接中,只是在进程的文件描述符中移除了(right?)所以导致了使用那个socket的线程一直没有收到关闭信号,阻塞在socket的recv上无法被关闭。而在windows上调用closesocket就彻底地断开了连接了。

下面是网上提供的信息:
close-----关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这个链接,能读或写这个socket id
shutdown--则破坏了socket 链接,读的时候可能侦探到EOF结束符,写的时候可能会收到一个SIGPIPE信号,这个信号可能直到socket buffer被填充了才收到,shutdown还有一个关闭方式的参数,0 不能再读,1不能再写,2 读写都不能。

所以,以后关闭socket还是同时使用shutdown和close好。

 

补充一下(2010-06-13):
1、在linux下,shutdown会引起在recv和send中阻塞的线程返回-1。但是在windows下,除非closesocket,否则线程仍然阻塞。

2、windows的描述符是递增的,linux的描述符是重用的。也就是说你在linux下关闭了描述符0,然后打开一个文件,这个文件就是用了描述符0。

19十一/094

Windows上模仿Linux下的time程序:wintime

程序和源代码下载:upfiles/wintime.zip

Usage: wintime program
Time Recording Method:
real    The real time the program REALLY runs.
user    The time the program runs in USER mode.
sys     The time the program runs in KERNEL mode.

使用示例(亦可以把程序拖到wintime.exe运行):

E:>wintime amend < amend/amend9.in
80

real    0m0.734
user    0m0.750
sys     0m0.000

示例2:

E:>wintime a
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5

real    0m0.015
user    0m0.015
sys     0m0.000
2十一/0912

终于成功把Ubuntu安装到U盘上了

30十/095

电影AntiTrust背后的代码

有人说《AntiTrust》真是一部宣传Linux系统的好电影,因为里面使用的电脑安装的基本上都是Linux操作系统,从男主角入侵Synapse的系统时可以看到。但我无意中发现电影里却还出现了Windows。

29十/097

Ubuntu 9.10,围观PS帝

围观PS帝。原图片来自http://www.ubuntu.com/files/countdown/910/countdown-9.10-1/02.png

原图:

18十/096

转载:《Unix、Gnu、Windows与明王朝、李自成、满清的相似性分析》

以下内容来自http://blog.csdn.net/duyanning/archive/2007/09/25/1800111.aspx,本人不发表任何观点,大家可以公证评论。

Unix:崇祯明王朝
GNU nux:李自成的农民起义军
Windows:满清
IBM:蒙古北元
计算机用户:山海关总兵吴三桂
易用性:陈圆圆

李自成农民起义军本来的敌人是明王朝(GNU is not Unix)。
满清原本不过是关外一个落后而弱小的野蛮民族(MS-DOS),仰望并粗陋地模仿着天朝(Unix)的一切。
北元,曾经不可一世的世界霸主,此时退居漠北偏安一隅。
满清在对北元既联合又打击的过程中逐渐壮大(从IBM-PC的DOS到微软自己的Windows)。
此时的明王朝已步入迟暮之年,在农民起义军的烽火中摇摇欲坠,关外是刚刚强大起来虎视眈眈的满清。

鹿死谁手,就要看吴三桂倒向哪一边了,这一切还得由陈圆圆最终决定。

分类: Linux 6 评论
第 6 页,共 7 页
« 最新
...
3
4
5
6
7