Linux 守护进程和 STDIN/STDOUT

2023-11-27

我正在开发一个 Linux 守护进程,并且在标准输入/标准输出方面遇到一些问题。通常,由于守护进程的性质,您没有任何标准输入或标准输出。但是,我的守护程序中确实有一个函数,当守护程序第一次运行时会调用该函数,以指定守护程序成功运行所需的不同参数。当这个函数被调用时,终端变得非常缓慢,我必须启动一个单独的 shell 并使用 top 杀死守护进程以获得响应提示。现在我怀疑这与关闭标准输入/标准输出的分叉过程有关,但我不太确定如何解决这个问题。如果你们能对这种情况有所了解,我们将不胜感激。谢谢。

Edit:

int main(argc, char *argv[]) {

/* setup signal handling */

/* check command line arguments */

pid_t pid, sid;

pid = fork();

if (pid < 0) {
exit(EXIT_FAILURE);
}

if(pid > 0){
exit(EXIT_SUCCESS);
}

sid = setsid();

if(sid < 0) {
exit(EXIT_FAILURE);
}

umask(027);

/* set syslogging */

/* do some logic to determine wether we are running the daemon for the first time and if we are call the one time function which uses fgets() to recieve some input */

while(1) {

/* do required work */

}

/* do some clean up procedures and exit */

return 0;
}

你们提到使用配置文件。这正是我存储通过输入接收到的参数所做的事情。不过,我最初仍然需要通过标准输入从用户那里获取这些信息。确定我们是否是第一次运行的逻辑是基于配置文件是否存在。


通常,守护程序的标准输入应连接到/dev/null,这样如果从标准输入读取任何内容,您会立即得到 EOF。通常,标准输出应该连接到一个文件 - 日志文件或/dev/null。后者意味着所有写入都会成功,但不会存储任何信息。同样,标准错误应该连接到/dev/null或到日志文件。

所有程序(包括守护程序)都有权假定 stdin、stdout 和 stderr 是适当打开的文件流。

守护进程通常可以控制其输入的来源和输出的去向。很少有机会来自其他方面的输入/dev/null。如果编写代码是为了在没有标准输出或标准错误的情况下生存(例如,它打开标准日志通道,或者可能使用syslog(3))那么关闭 stdout 和 stderr 可能是合适的。否则,将它们重定向到可能是合适的/dev/null,同时仍将消息记录到日志文件中。或者,您可以将 stdout 和 stderr 重定向到日志文件 - 请注意不断增长的日志文件。

您的响应时间缓慢到不可能,可能是因为您的程序没有注意某处读取循环中的 EOF。它可能会提示用户在 /dev/null 上输入,并从 /dev/null 读取响应,但没有得到“y”或“n”返回,它会再次尝试,这会严重影响您的系统。当然,该代码的缺陷在于不处理 EOF,并计算获得无效响应的次数,并在合理的尝试次数(16、32、64)后停止愚蠢。如果程序期望得到有意义的输入但仍然得不到它,它应该理智且安全地关闭商店。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 守护进程和 STDIN/STDOUT 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 比较两个文件的单列

    我有两个文件 每个文件都有两列 并用空格分隔 我想找到两个文件中第 2 列不相同的行 并将它们输出到第三个文件 file A 1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 2 BBBBBBBBBBBBBBBBBBBBBB
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • Bash:递归复制命名文件,保留文件夹结构

    我希望 cp R src prog js images icon jpg tmp package 将在目标目录中产生对称结构 tmp package src prog js images icon jpg 但相反 这两个文件都被复制到 tm
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi

随机推荐

  • 如何在 IIS 上设置反向代理,以允许 host1.mydomain.com 和 host2.mydomain.com 之间进行跨主机通信?

    我在 host1 mydomain com page from host1 jsp 上有一个页面 在 host2 mydomain com page from host2 html 上有一个 HTML 页面 host1 是 IIS7 Tom
  • 在 Android 4.4 中启用 TLS 1.2

    我使用 Retrofit 和 OkHttp3 来发出请求 我知道在 Android 4 4 中 默认情况下未启用 TLS 1 1 和 TLS 1 2 所以我正在尝试启用它们 但到目前为止我还没有成功 我读到这可能是 android stud
  • 如何移动google地图的中心位置

    我正在使用以下代码在脚本中创建谷歌地图 var mapElement parent mapOptions map marker latLong openMarker parent document getElementsByClassNam
  • Gitlab 端口 8080

    我目前正在尝试在我的私人 Debian 服务器上安装 Gitlab 综合总线 它在端口 80 上运行得很好 问题是我还有一个 Apache 服务器在监听端口 80 所以我正在尝试让 Nginx监听端口 8080 但由于某种原因我得到了 50
  • 为什么多态性在没有指针/引用的情况下不起作用?

    我确实在 StackOverflow 上发现了一些具有类似标题的问题 但是当我阅读答案时 他们关注的是问题的不同部分 这些部分非常具体 例如 STL 容器 有人可以告诉我 为什么必须使用指针 引用来实现多态性吗 我可以理解指针可能会有所帮助
  • 检测用户所在国家/地区的最快方法

    我需要检测用户的国家 地区并按他 她的国家 地区显示网站的语言 土耳其人用土耳其语 其他人用英语 我怎样才能以最快的方式做到这一点 表现对我来说很重要 我在看IPInfoDB 的 API 还有更好的选择吗 我使用的是PHP 对于可能在 20
  • 消息 8114,级别 16,状态 5,第 1 行将数据类型 varchar 转换为数字时出错

    Select CAST de ornum AS numeric 1 as ornum2 from Cpaym as de left outer join Cpaym as de1 on CAST de ornum AS numeric de
  • 毕加索实际上是如何缓存图像的

    我想知道毕加索图书馆到底是如何缓存应用程序内的图像的 我知道它使用 HttpHeaders 来检查天气以从网络获取图像 但是 它缓存图像有时间范围吗 比如一天后使缓存无效之类的 问题是我的项目正在从网络加载大量小图像 有时 新图像会反映在下
  • 预测精度:没有以两个向量作为参数的 MASE

    我正在使用accuracy函数从forecast包 计算精度测量 我使用它来计算拟合时间序列模型的度量 例如 ARIMA 或指数平滑 当我在不同维度和聚合级别上测试不同模型类型时 我使用 Hyndman 等人引入的 MASE 平均绝对比例误
  • ggplot2 的图像文件压缩选项

    是否可以使用压缩图形的文件大小ggsave 我尝试过使用compression lzw 参数 但文件大小保持不变 使用 R studio 98 501 OS X Yosemite My code ggsave Figure1 tiff wi
  • Selenium Phantomjs 浏览器在启动时挂起。我该如何调试它?

    我正在尝试帮助在其他人的设置上运行我的 selenium Python 绑定版本 2 测试 它可以与 Firefox esr 两台机器上 配合使用 也可以与我的机器上最新的 phantomjs 配合使用 它挂在他的机器上 唯一明显的区别是他
  • 如何根据用户输入动态构建并返回 linq 谓词

    在这件事上有点卡住了 基本上我有一个方法 我想返回一个谓词表达式 我可以将其用作Where 条件 我认为我需要做的与此类似 http msdn microsoft com en us library bb882637 aspx但我对我需要做
  • 如何加速嵌套循环?

    我正在 python 中执行一个嵌套循环 如下所示 这是搜索现有金融时间序列并在时间序列中寻找符合某些特征的周期的基本方法 在这种情况下 有两个独立的 大小相等的数组 分别代表 收盘价 即资产的价格 和 交易量 即一段时间内交换的资产数量
  • 如何通过 SendKeys 发送特殊字符?

    我正在尝试在 Selenium2 中填写表格 One input has an autocomplete that I want to close preferably by sending esc after the search ter
  • Tensorflow:ValueError:形状必须为 2 级,但为 3 级

    我是张量流新手 我正在尝试将双向 LSTM 的一些代码从旧版本的张量流更新到最新版本 1 0 但出现此错误 形状必须为等级 2 但 MatMul 3 操作 MatMul 的等级为 3 输入形状为 100 400 400 2 错误发生在 pr
  • Spring Data RedisTemplate:序列化 Value 和 HashValue

    我尝试按照本教程进行操作 http javakart blogspot in 2012 12 spring data redis hello world example html 我的问题与此相关 带有 Spring Data Jedis
  • IntelliJ IDEA插件开发:如何修改Psi树?

    我想知道创建新的 PsiElement 实例并将其添加到 Psi 树的 正确 方法是什么 我查看了JetBrains提供的教程 http www jetbrains org intellij sdk docs tutorials custo
  • Ajax.BeginForm 与 OnBegin 阻止调用操作

    我在 MVC3 Razor 应用程序中使用 Ajax Beginform using Ajax BeginForm ActionName ControllerName new AjaxOptions OnBegin ValidateDate
  • Sequelize - 通过包含向查询添加限制,无法正确限制检索

    问题描述 使用子查询向 Sequelize 查询添加限制无法限制检索 多个在线资源引用了此错误 但没有解决方案 这是 Sequelize 错误还是用户错误 你在干什么 ThreadFolderUser findAll order updat
  • Linux 守护进程和 STDIN/STDOUT

    我正在开发一个 Linux 守护进程 并且在标准输入 标准输出方面遇到一些问题 通常 由于守护进程的性质 您没有任何标准输入或标准输出 但是 我的守护程序中确实有一个函数 当守护程序第一次运行时会调用该函数 以指定守护程序成功运行所需的不同