linux后台运行程序的问题

时间:2022-09-20 08:09:36
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d\n", a);
return 0;
}

这样一个程序,有输入。。编译生成test
如果在后台运行的话:./test &
进程会马上结束,为什么??

root@proudboy-desktop:~/Desktop# ./test &
[3] 12066

[3]+  Stopped                 ./test

12 个解决方案

#1


系统把他作为了守护进程运行吗?输入被重定向到了/dev/null?

#2


也不是啊,在后台运行了一个死循环,查看了进程信息,不是守护进程~~

#3


因为你的程序运行完毕!!

后台是没有标准输入输出的。
scanf("%d", &a); 会立即接收到输入,不过是未定义的。
printf("%d\n", a); 

#4


scanf("%d", &a); 会立即接收到输入,不过是未定义的。 

能详细解释一下这句吗?

#5


引用 3 楼 chenee543216 的回复:
因为你的程序运行完毕!!

 后台是没有标准输入输出的。
 scanf("%d", &a); 会立即接收到输入,不过是未定义的。
 printf("%d\n", a);

不要误导。

程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。

#6


你这个程序一执行马上就结束了 当然会出现你说的情况了

#7


我试过没有退出的情况,PS看下程序还在

#8


程序并没有退出,进程处在stop状态而已,类似用kill发了个SIGSTOP信号,比如你运行
$ emacs -nw &
然后你查看它的状态也是stop,用fg把它调到前台就是run状态。stop不是terminal。

#9


重复说一遍:
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。

#10


ls正解

#11


引用 5 楼 iisbsd 的回复:
引用 3 楼 chenee543216 的回复:
 因为你的程序运行完毕!!

  后台是没有标准输入输出的。
  scanf("%d", &a); 会立即接收到输入,不过是未定义的。
  printf("%d\n", a);


 不要误导。

 程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。


shy!丢人啊!刚才测试一下是我乱说。
记错了!sorry,sorry。

#12


不知道LZ是不是真的明白了,按给分的情况看,不像明白了。

#1


系统把他作为了守护进程运行吗?输入被重定向到了/dev/null?

#2


也不是啊,在后台运行了一个死循环,查看了进程信息,不是守护进程~~

#3


因为你的程序运行完毕!!

后台是没有标准输入输出的。
scanf("%d", &a); 会立即接收到输入,不过是未定义的。
printf("%d\n", a); 

#4


scanf("%d", &a); 会立即接收到输入,不过是未定义的。 

能详细解释一下这句吗?

#5


引用 3 楼 chenee543216 的回复:
因为你的程序运行完毕!!

 后台是没有标准输入输出的。
 scanf("%d", &a); 会立即接收到输入,不过是未定义的。
 printf("%d\n", a);

不要误导。

程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。

#6


你这个程序一执行马上就结束了 当然会出现你说的情况了

#7


我试过没有退出的情况,PS看下程序还在

#8


程序并没有退出,进程处在stop状态而已,类似用kill发了个SIGSTOP信号,比如你运行
$ emacs -nw &
然后你查看它的状态也是stop,用fg把它调到前台就是run状态。stop不是terminal。

#9


重复说一遍:
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。

#10


ls正解

#11


引用 5 楼 iisbsd 的回复:
引用 3 楼 chenee543216 的回复:
 因为你的程序运行完毕!!

  后台是没有标准输入输出的。
  scanf("%d", &a); 会立即接收到输入,不过是未定义的。
  printf("%d\n", a);


 不要误导。

 程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。


shy!丢人啊!刚才测试一下是我乱说。
记错了!sorry,sorry。

#12


不知道LZ是不是真的明白了,按给分的情况看,不像明白了。