【转载】服务启动Apache服务,错误Parent: child process exited with status 3 .解决

本文针对Apache服务启动后随即停止的问题提供了详细的解决方案。通过调整网络设置,包括禁用LMhosts查询和配置防火墙策略,可以有效解决由网络参数引起的Apache启动异常。

 

不能启动apache,或者使用wamp等集成包后,唯独apache服务启动后有停止,但是把东西搬到其他机器上却没事
问题可能和网络有关,我查了很多资料

首先找打apache的错误报告日志,发现现实诸多的调试错误中会有这么几句总是一样的

[Mon Dec 17 20:44:15 2008] [notice] Server built: Mar  5 2007 11:23:00
[Mon Dec 17 20:44:15 2008] [notice] Parent: Created child process 2388
[Mon Dec 17 20:44:22 2008] [notice] Child 2388: Child process is running
[Mon Dec 17 20:44:22 2008] [crit] (OS 10022)提供了一个无效的参数。  : Child 2388: setup_inherited_listeners(), WSASocket failed to open the inherited socket.
[Mon Dec 17 20:44:27 2008] [crit] Parent: child process exited with status 3 -- Aborting.

怎么他NND会平白无故出这个错误,自己冒出来的?
child process exited with status 3 这句在google搜了很多遍后找到解决办法
解决办法:
1.网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾.

2.控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾选安全Web服务器(HTTPS)即可.
(这上下两项完成后仍然有问题,选中:启用 TCI/IP 上的 NetBOIS.)
选择其一即可
### 回答问题 从你的输出来看,程序运行时遇到了 `Execvp failed: Permission denied` 的错误。这表明在调用 `execvp` 时,系统无法执行指定的命令 `/root/projects/W2 test.mp3`。以下是问题的原因分析和解决方法。 --- #### 问题原因分析 1. **路径或文件名错误**: - `execvp` 的第一个参数是可执行文件的路径。如果路径错误或文件不存在,则会导致 `Permission denied` 错误。 - 在你的代码中,`args[0]` 被设置为 `"/usr/bin/mplayer"`,但如果你的系统中 `mplayer` 不在该路径下,或者你将路径写错了,就会导致问题。 2. **权限问题**: - 即使路径正确,如果当前用户没有权限执行该文件,也会报 `Permission denied`。 - 检查 `/usr/bin/mplayer` 是否存在,并确保当前用户有执行权限。 3. **目标文件(如 `test.mp3`)不可访问**: - 如果 `test.mp3` 文件不存在或当前用户没有读取权限,`mplayer` 会失败。 - 确保 `test.mp3` 文件存在且路径正确。 4. **环境变量问题**: - 如果使用的是相对路径(如 `mplayer` 而不是 `/usr/bin/mplayer`),`execvp` 会根据 `PATH` 环境变量搜索可执行文件。如果 `PATH` 中不包含 `mplayer` 的路径,也可能导致失败。 --- #### 解决方法 1. **检查路径和文件是否存在**: - 确认 `mplayer` 的安装路径是否为 `/usr/bin/mplayer`。如果不是,请更正路径。 - 使用以下命令检查文件是否存在并具有执行权限: ```bash ls -l /usr/bin/mplayer ``` - 如果文件不存在,可以尝试重新安装 `mplayer`: ```bash sudo apt-get install mplayer ``` 2. **检查目标文件(如 `test.mp3`)**: - 确认 `test.mp3` 文件存在且路径正确。 - 使用以下命令检查文件权限: ```bash ls -l test.mp3 ``` - 如果文件不存在或权限不足,可以创建一个示例文件或调整权限: ```bash touch test.mp3 && chmod 644 test.mp3 ``` 3. **修改代码中的路径**: - 确保 `args[0]` 和 `args[1]` 的值正确。例如: ```c char *args[] = {"/usr/bin/mplayer", "test.mp3", NULL}; ``` 4. **调试程序**: - 在程序中添加更多的调试信息,确认传递给 `execvp` 的参数是否正确。例如: ```c printf("Executing command: %s %s\n", args[0], args[1]); ``` --- #### 修改后的代码 ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() { pid_t pid = fork(); // 创建子进程 if (pid < 0) { // 检查 fork 是否失败 perror("Fork failed"); return 1; } else if (pid == 0) { // 子进程 printf("Child process is running, PID: %d\n", getpid()); // 使用 execvp 更改代码段以执行 mplayer 命令 char *args[] = {"/usr/bin/mplayer", "test.mp3", NULL}; // 替换为实际文件路径 // 打印调试信息 printf("Executing command: %s %s\n", args[0], args[1]); execvp(args[0], args); // 更改代码段 // 如果 execvp 返回,则说明执行失败 perror("Execvp failed"); _exit(1); } else { // 父进程 printf("Parent process is running, PID: %d\n", getpid()); printf("Waiting for child process to finish...\n"); // 等待子进程结束 int status; wait(&status); if (WIFEXITED(status)) { printf("Child process exited with status: %d\n", WEXITSTATUS(status)); } else { printf("Child process terminated abnormally.\n"); } } return 0; } ``` --- #### 解释 1. **路径检查**: - 确保 `args[0]` 指向正确的可执行文件路径。 - 如果路径不确定,可以使用 `which mplayer` 命令查找 `mplayer` 的安装路径。 2. **文件权限**: - 确保目标文件(如 `test.mp3`)存在且具有正确的读取权限。 3. **调试信息**: - 在调用 `execvp` 前打印参数,便于排查问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值