Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
056ce721
Commit
056ce721
authored
5 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完整主进程
parent
bc0a39bc
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
12 行增加
和
18 行删除
+12
-18
server/System.cpp
+9
-18
server/main.cpp
+3
-0
没有找到文件。
server/System.cpp
查看文件 @
056ce721
...
...
@@ -275,23 +275,16 @@ static void sig_crash(int sig) {
void
System
::
startDaemon
()
{
signal
(
SIGTTOU
,
SIG_IGN
);
signal
(
SIGTTIN
,
SIG_IGN
);
signal
(
SIGHUP
,
SIG_IGN
);
signal
(
SIGINT
,
[](
int
)
{
InfoL
<<
"SIGINT:exit"
;
signal
(
SIGINT
,
SIG_IGN
);
throw
ExitException
();
});
static
pid_t
pid
;
do
{
auto
pid
=
fork
();
pid
=
fork
();
if
(
pid
==
-
1
){
WarnL
<<
"fork失败:"
<<
get_uv_errmsg
();
//休眠1秒再试
sleep
(
1
);
continue
;
}
if
(
pid
==
0
){
//子进程
return
;
...
...
@@ -299,8 +292,13 @@ void System::startDaemon() {
//父进程,监视子进程是否退出
DebugL
<<
"启动子进程:"
<<
pid
;
signal
(
SIGINT
,
[](
int
)
{
WarnL
<<
"收到主动退出信号,关闭父进程与子进程"
;
kill
(
pid
,
SIGINT
);
exit
(
0
);
});
do
{
try
{
int
status
=
0
;
if
(
waitpid
(
pid
,
&
status
,
0
)
>=
0
)
{
WarnL
<<
"子进程退出"
;
...
...
@@ -309,13 +307,6 @@ void System::startDaemon() {
break
;
}
DebugL
<<
"waitpid被中断:"
<<
get_uv_errmsg
();
}
catch
(
ExitException
&
ex
){
WarnL
<<
"收到主动退出信号,关闭父进程与子进程"
;
//通知子进程主动退出
kill
(
pid
,
SIGINT
);
//父进程主动退出
exit
(
0
);
}
}
while
(
true
);
}
while
(
true
);
}
...
...
This diff is collapsed.
Click to expand it.
server/main.cpp
查看文件 @
056ce721
...
...
@@ -160,6 +160,9 @@ extern void unInstallWebHook();
static
void
inline
listen_shell_input
(){
cout
<<
"> 欢迎进入命令模式,你可以输入
\"
help
\"
命令获取帮助"
<<
endl
;
cout
<<
"> "
<<
std
::
flush
;
signal
(
SIGTTOU
,
SIG_IGN
);
signal
(
SIGTTIN
,
SIG_IGN
);
SockUtil
::
setNoBlocked
(
STDIN_FILENO
);
auto
oninput
=
[](
int
event
)
{
if
(
event
&
Event_Read
)
{
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论