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);
后台是没有标准输入输出的。
scanf("%d", &a); 会立即接收到输入,不过是未定义的。
printf("%d\n", a);
#4
scanf("%d", &a); 会立即接收到输入,不过是未定义的。
能详细解释一下这句吗?
能详细解释一下这句吗?
#5
不要误导。
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。
#6
你这个程序一执行马上就结束了 当然会出现你说的情况了
#7
我试过没有退出的情况,PS看下程序还在
#8
程序并没有退出,进程处在stop状态而已,类似用kill发了个SIGSTOP信号,比如你运行
$ emacs -nw &
然后你查看它的状态也是stop,用fg把它调到前台就是run状态。stop不是terminal。
$ emacs -nw &
然后你查看它的状态也是stop,用fg把它调到前台就是run状态。stop不是terminal。
#9
重复说一遍:
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。
#10
ls正解
#11
shy!丢人啊!刚才测试一下是我乱说。
记错了!sorry,sorry。
#12
不知道LZ是不是真的明白了,按给分的情况看,不像明白了。
#1
系统把他作为了守护进程运行吗?输入被重定向到了/dev/null?
#2
也不是啊,在后台运行了一个死循环,查看了进程信息,不是守护进程~~
#3
因为你的程序运行完毕!!
后台是没有标准输入输出的。
scanf("%d", &a); 会立即接收到输入,不过是未定义的。
printf("%d\n", a);
后台是没有标准输入输出的。
scanf("%d", &a); 会立即接收到输入,不过是未定义的。
printf("%d\n", a);
#4
scanf("%d", &a); 会立即接收到输入,不过是未定义的。
能详细解释一下这句吗?
能详细解释一下这句吗?
#5
不要误导。
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。
#6
你这个程序一执行马上就结束了 当然会出现你说的情况了
#7
我试过没有退出的情况,PS看下程序还在
#8
程序并没有退出,进程处在stop状态而已,类似用kill发了个SIGSTOP信号,比如你运行
$ emacs -nw &
然后你查看它的状态也是stop,用fg把它调到前台就是run状态。stop不是terminal。
$ emacs -nw &
然后你查看它的状态也是stop,用fg把它调到前台就是run状态。stop不是terminal。
#9
重复说一遍:
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。
程序其实还在运行,只是等待输入,但是因为没有标准输入,所以就等在那里。你可以用fg把它转到前台继续运行(也就是你可以输入数据)。
#10
ls正解
#11
shy!丢人啊!刚才测试一下是我乱说。
记错了!sorry,sorry。
#12
不知道LZ是不是真的明白了,按给分的情况看,不像明白了。