前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志Tina平台使用procd做为1号进程时printf阻塞线程问题解决方法

全志Tina平台使用procd做为1号进程时printf阻塞线程问题解决方法

作者头像
阿志小管家
发布2024-02-02 14:43:02
930
发布2024-02-02 14:43:02
举报

【问题描述】 使用procd做为1号进程,在rc.local中启动了一个应用程序,程序中使用了printf打印,发现会阻塞程序,在/proc/xxx/fd中查看文件描述符指向一个管道。

【解决方法】 将全志提供的一个patch放到tina/package/system/procd/patches目录下。 patch内容如下,也可以自己新建一个patch文件:

--- a/rcS.c +++ b/rcS.c @@ -26,7 +26,7 @@  #include <sys/types.h>  #include <sys/stat.h>  #include <glob.h> - +#include <fcntl.h>  #include <libubox/ustream.h>  #include "procd.h" @@ -88,6 +88,7 @@      if (pid) {          close(pipefd[1]); +        fcntl(pipefd[0], F_SETFD, FD_CLOEXEC);          s->fd.stream.string_data = true,          s->fd.stream.notify_read = pipe_cb,          runqueue_process_add(q, &s->proc, pid); --- a/service/instance.c +++ b/service/instance.c @@ -417,11 +417,13 @@      if (opipe[0] > -1) {          ustream_fd_init(&in->_stdout, opipe[0]);          closefd(opipe[1]); +        fcntl(opipe[0], F_SETFD, FD_CLOEXEC);      }      if (epipe[0] > -1) {          ustream_fd_init(&in->_stderr, epipe[0]);          closefd(epipe[1]); +        fcntl(epipe[0], F_SETFD, FD_CLOEXEC);      }      service_event("instance.start", in->srv->name, in->name);

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档