当前位置: 首页 > 知识库问答 >
问题:

如何保证程序退出时systemd和journald之间的stdout缓冲区被刷新?

雷飞虎
2023-03-14

演示一个问题的简化示例是

#include <stdio.h>

int main(void)
{
    printf("foo\n");
    fflush(stdout);
    getchar();
    return 0;
}
[Unit]
Description=description
After=network.target

[Service]
ExecStart=/path/to/binary

[Install]
WantedBy=multi-user.target
May 18 08:30:38 hostname systemd[1]: Stopped servicename
May 18 08:30:38 hostname systemd[1]: Started servicename
May 18 08:30:38 hostname systemd[1]: Stopped servicename
May 18 08:30:38 hostname systemd[1]: Started servicename
May 18 08:30:38 hostname servicename[7701]: foo
May 18 08:30:41 hostname systemd[1]: Stopped servicename
May 18 08:30:41 hostname systemd[1]: Started servicename
May 18 08:30:46 hostname systemd[1]: Stopped servicename
May 18 08:30:46 hostname systemd[1]: Started servicename
May 18 08:30:38 hostname systemd[1]: Stopped servicename.
May 18 08:30:38 hostname systemd[1]: Started servicename.
May 18 08:30:38 hostname servicename[7682]: foo
May 18 08:30:38 hostname systemd[1]: Stopped servicename.
May 18 08:30:38 hostname systemd[1]: Started servicename.
May 18 08:30:38 hostname servicename[7701]: foo
May 18 08:30:41 hostname systemd[1]: Stopped servicename.
May 18 08:30:41 hostname systemd[1]: Started servicename.
May 18 08:30:41 hostname servicename[7720]: foo
May 18 08:30:46 hostname systemd[1]: Stopped servicename.
May 18 08:30:46 hostname systemd[1]: Started servicename.
May 18 08:30:46 hostname servicename[7739]: foo

如果有的话,有什么方法可以保证journald收到stdout

共有1个答案

仲孙善
2023-03-14

tldr,这是一个众所周知的问题。

我在systemd-devel maillist上问了同样的问题,并得到了一个关于报道问题的回复。

 类似资料:
  • 本文向大家介绍假脱机和缓冲之间的区别,包括了假脱机和缓冲之间的区别的使用技巧和注意事项,需要的朋友参考一下 在计算机性能方面,主要因素是多任务处理,即CPU如何在不同的输入输出子系统之间划分和执行进程。为了最有效地处理任务,计算机系统使用各种方法来计划任务,加快计算速度并改善Web浏览,其中假脱机和缓冲是主要方法。 以下是假脱机和缓冲之间的重要区别。 序号 键 假脱机 正在缓冲 1 定义 后台打印

  • 问题内容: 简单的说,我总是对PHP / MySQL缓冲查询和非缓冲查询之间的区别是,缓冲(默认)将所有数据加载到结果集变量中, 然后 您可以开始使用它们,而无缓冲则在以下位置加载行:一个时间。 假设您先运行然后进行了,它将包含所有行和补充信息,例如行数。因此,如果您在100MB的数据库上执行此操作,那么如果那里没有索引,则可能会占用约100MB的空间)。 但是,我遇到了这样的SO溢出问题,其中一

  • 问题内容: 在log4j中,当使用具有BufferedIO = true和BufferSize = xxx属性(即启用了缓冲)的FileAppender时,我希望能够在正常关闭过程中刷新日志。有关如何执行此操作的任何想法? 问题答案:

  • 问题内容: 有人可以保存这两个文件并运行它们,然后告诉我为什么我得到错误“ ob_flush()[ref.outcontrol]:无法刷新缓冲区。没有要刷新的缓冲区”。我尝试了四处搜寻,并说必须使用ob_start();。但是,当我这样做时,它不会逐行打印出来,而是在完成后从FOR循环返回整个对象。我对PHP有点陌生,所以我不确定其他地方。 test_process.php main.html 问

  • 我在Java中使用来自动化。当我的程序退出时,内存中会留下一个实例。我知道我可以使用来关闭当前实例。但是,如果应用程序在任何时候被杀死(例如在调试会话期间),这种清理当然永远不会执行。 我正在寻找一种制作chromedriver的解决方案。exe是Java进程的子进程,因此当Java进程退出时,子进程也会自动终止。解决方案,如运行时。getRuntime()。exec(“taskkill/F/IM

  • 问题内容: 什么是CSS3过渡的区别,等等? 问题答案: CSS3的过渡和动画支持缓动,正式称为“定时功能”。常见的有,,,,和,或者您可以使用自己指定。 将缓慢开始动画,并以全速结束。 将以全速开始动画,然后缓慢完成。 将缓慢开始,在动画中间最快,然后缓慢完成。 类似于,不同之处在于它的开始时间比结束时间略快。 不使用任何宽松措施。 最后,这里对语法做了很好的描述,但是除非您需要一些非常精确的效