centos下运行编译c程序的整体过程(以fork下父子进程调用问题为例)

先说几个关键命令:

  1. yum -y install XXX //XXX命令找不到,直接用
  2. gcc XXX.c -o XXX //gcc编译程序
  3. ./XXX //运行编译文件
  4. man [方法名] //比如不懂fork函数,直接 man fork 就有完整解释
    第一步:创建目录及相应源程序文件
    mkdir 和 touch 不用过多解释
    第二部:编写程序
    vim fork.c
    打开文件后按 a 开始编写,之后按 esc, 输入 :x 或者 :x!(修改程序时用) 保存并 ctrl+z 退出文件。
    然后, 编译
    gcc fork.c -o fork
    最后运行
    ./fork

下面是fork 父子进程的执行顺序问题

#include <unistd.h>
int main(){
int i;
if( fork() == 0 )
{
for( i = 1 ; i <10 ;i++)
printf(“我是子进程%d\n”,getpid());
}
else
{
for( i = 1 ; i <10 ; i++){
printf(“我是父进程%d\n”,getpid());
//sleep(3);
}
}
}

结果是

[root@localhost c]# ./fork
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177

不是应该父子进程交替输出么?

把sleep(3)的注释去掉
结果为

[root@localhost c]# ./fork
我是父进程2192
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192

可以看到父进程执行到中间由于sleep了3秒,转去执行子进程了。

看了几篇文章,说是系统对进程的调度问题。

我的猜测:父子进程应该是执行完一个在搞另一个,父进程中生成子进程后,子进程排队等着父进程结束再进行,然而父进程sleep 3s,这时系统会让子进程先来运行,等父进程醒过来也只能等子进程结束后才能执行了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS 7 中,可以使用 `systemd` 来管理后台运行程序。以下是在 `systemd` 中启动自己编写的程序的步骤: 1. 编写一个 `.service` 文件,来描述你要启动的程序。 ```ini [Unit] Description=My Program After=network.target [Service] Type=forking Restart=always ExecStart=/path/to/your/program PIDFile=/run/yourprogram.pid [Install] WantedBy=multi-user.target ``` 其中,`Description` 是描述你的程序的一个字符串,`ExecStart` 是你的程序的启动命令,`Restart` 是设置程序异常退出后自动重启,`PIDFile` 是指定程序的 PID 文件路径,`WantedBy` 是系统启动时要启动的 `target`。 2. 将 `.service` 文件复制到 `/etc/systemd/system/` 目录下。 ``` sudo cp yourprogram.service /etc/systemd/system/ ``` 3. 重新加载 `systemd` 配置文件,使其生效。 ``` sudo systemctl daemon-reload ``` 4. 启动你的程序。 ``` sudo systemctl start yourprogram.service ``` 这时程序就会以守护进程方式启动。 5. 如果需要开机自动启动程序,可以使用以下命令启用服务: ``` sudo systemctl enable yourprogram.service ``` 这样,系统启动时就会自动启动你的程序。 如果想要查看程序的状态,可以使用以下命令: ``` sudo systemctl status yourprogram.service ``` 如果想要停止程序,可以使用以下命令: ``` sudo systemctl stop yourprogram.service ``` 如果想要重启程序,可以使用以下命令: ``` sudo systemctl restart yourprogram.service ``` 以上就是在 CentOS 7 中以守护进程方式启动自己编写的程序的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值