linux的startpar指令,linux – 从rc.local或init.d启动进程时,startpar进程挂起

博主在处理脚本时遇到startpar进程阻塞问题,通过深入调查发现解决方案是重定向标准输入和输出到/dev/null。文章讨论了为何初始问题出现及最终采用的nohup和su命令技巧。关键词揭示了进程管理、标准流重定向和守护进程的奥秘。
摘要由CSDN通过智能技术生成

我对此的进一步调查使我找到了解决方案.所以现在我知道如何正确地做到这一点,但我仍然不明白为什么startpar表现得像它一样.因此,如果有人愿意介入并解释,我非常愿意接受这个答案而不是这个答案.

基本上问题是我调用脚本时没有将标准输入,标准输出和标准错误重定向(或关闭)到文件或/ dev / null,并且由于某种原因startpar(“用于并行运行多个运行级脚本”) )进程,据我所知,是在启动过程中启动其他进程的进程,因此被阻止在我的这个脚本上.它确实启动了我的脚本,但它本身并没有完成运行,并且在进程列表中显示为阶段:

UID PID PPID C SZ RSS PSR STIME TTY TIME CMD

root 3048 1 0 1024 620 1 20:04 ? 00:00:00 startpar -f -- rc.local

我浏览了它,并在我在stackoverflow上发布的一个新问题中进行了初步分析.在我在这里添加到我的问题的UPDATE中找到链接.

我使用的最终解决方案是:

su someuser -c "nohup some_script.sh >/dev/null 2>&1 &"

su – 将用户身份替换为某个用户

-c – su参数以运行指定的命令

nohup – 运行一个免于挂断的命令.防止父进程终止子进程的情况.这里添加以防万一.但实际上对我的具体情况没有任何影响.是否需要取决于环境(检查shopt)

> / dev / null – 将标准输出重定向为空,基本上禁用它.

2>& 1 – 将标准错误(2)输出重定向到标准输出(1),重定向到null

&安培; – 分离到背景,这会将标准输入重定向到/ dev / null.

查看在我的系统上运行的其他已知守护进程的文件描述符,我看到重定向到/ dev / null是常见的事情.并且只有一些守护进程实际上完全关闭了stdin,stdout,stderr.例如,可以通过以下方式实现:

su someuser -c "some_script.sh 0&- 2>&- &"

在实际意义上它是完全相同的,并且正是需要(任一选项)将进程干净地分离为后台守护进程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值