LINUX 下的 C++程序,在前台运行时 CPU 正常,然后用 nohup 将程序跑在后台瞬间飙到 90+以上,怎么回事??

2016-07-16 13:53:21 +08:00
 wbing
google 了下有看到也有其他人遇到这问你,就是没有说出是为啥
3100 次点击
所在节点    问与答
10 条回复
jemyzhang
2016-07-16 14:01:41 +08:00
strace
wbing
2016-07-16 14:26:01 +08:00
@jemyzhang strace 貌似怎么和 nohup 共用??
我用 strace -cp $(nohup ./MyExe &)
只显示了重定向错误到标准输出,然后就没打印其他了,而我这程序只有在用 nohup ./MyExe & 时才会 cpu 上 100
gulucn
2016-07-16 14:36:24 +08:00
strace -p 可以指定进程号。
wbing
2016-07-16 14:40:17 +08:00
@gulucn

我 2 楼上面那个命令就是这个, 我先执行 nohup ./MyExe & ,再执行 strace -p MyPID 的话,
就只输出了 “ Process MyPID attached",其他什么都没显示
redsonic
2016-07-16 15:12:23 +08:00
程序前台执行的时候有很多输出吗?如果有, nohup ./MyExe > /dev/null 再试试,如果这个就 ok 了,回头再看看之前 top 输出的 wa 是不是很高,如果是,检查硬盘是不是满了或硬盘故障。
wbing
2016-07-16 15:30:00 +08:00
@redsonic

是个服务来的,很多日志。

现在知道问题原因了,是卡在标准输入上面了。
9hills
2016-07-16 17:35:55 +08:00
nohup. Xxx </Dev/null
lean
2016-07-16 18:00:23 +08:00
nohup ./demo >/dev/null 2>&1 & 遇到过类似的情况,不知这样是否可行
wbing
2016-07-16 21:28:17 +08:00
@9hills

你这样也是同样的情况的,还是标准输入一直有个空的进去.

@lean
你这是只是把错误输出和标准输出重定向到 /dev/null , 对于标准输入那边还是没作用的

------------------------------------------------

我这边有个类似的 demo

```

#include<iostream>
#include<string>
using namespace std;


int main()
{
string aa;
while(true)
{
cin >> aa;
if(aa=="q")
break;
if(aa=="")
cout << "empty" << endl;
}
return 0;
}


``

然后用 nohup 后台跑起来,top 查看该进程,cpu 一个核直接上 100%.

一开始试了下用 select 去处理,但发现一直有输入,所以没作用.

目前我是让其当遇到空输入时,就 sleep 100 毫秒. 就没有这种问题出现了. 不知道还有没更好的解决办法
9hills
2016-07-16 22:32:39 +08:00
@wbing 呵呵,不解释

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292865

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX