自己编写的Linux Web Server调用CGI程序时出现问题

自己编写的Linux Web Server调用CGI程序时出现问题,第1张

如果你的程序中的 CGI 程序只能启动一次,可能是因为你的程序没有正确处理子进程退出的情况。

在调用 execvp 函数启动子进程执行 CGI 程序时,子进程会替换掉父进程的代码和数据空间,执行 CGI 程序。如果 CGI 程序执行完毕后正常退出,子进程会自动结束,父进程会收到子进程退出的信号。

在收到子进程退出的信号后,父进程应该调用 wait 或者 waitpid 函数等待子进程退出,并获取子进程的退出状态。如果父进程没有调用 wait 或者 waitpid 等待子进程退出,子进程可能会变成僵尸进程,导致后续的 CGI 程序无法正常启动。

因此,建议在父进程中调用 wait 或者 waitpid 等函数等待子进程退出,以避免出现僵尸进程的情况。

回答不易,请点个赞。

用户可以参考如下php-cgi安装启动过程。

1、解包

tar zxvf php-5.2.6.tar.gz

2、安装

cd php-5.2.6/

./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-zlib-dir --with-freetype-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-gd --enable-ftp --with-iconv --with-gettext --with-curl --enable-fastcgi --with-openssl

make &&make install

cd /usr/local/php/lib

cp php.ini-dist php.ini

cp /usr/local/php/bin/php /usr/bin/php-cgi

3、修改php.ini

nano php.ini 按f6然后输入extension_dir

查找/usr/local/php/etc/php.ini中的extension_dir = "./"

修改为extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

4、启动php-cgi

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -f /usr/bin/php-cgi

nginx配置文件中的 fastcgi_pass 127.0.0.1:9000就是根据上面来的

5、查看一下

[zhangy@BlackGhost www]$ ps -e|grep php-cgi

3737 ?00:00:00 php-cgi

3738 ?00:00:03 php-cgi

3739 ?00:00:03 php-cgi

3740 ?00:00:04 php-cgi

3741 ?00:00:03 php-cgi

3742 ?00:00:03 php-cgi


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7258919.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存