如何在使用shell的后台运行linux应用程序?

问题描述:

我有一个C程序的应用程序/二进制文件,默认情况下它使用shell从用户那里获取输入。所以,当我使用&在后台启动应用程序时,它会自动停止,因为我没有访问权限的实现。当我运行此代码如何在使用shell的后台运行linux应用程序?

iStatus = system("./flute-static -send -a232.0.0.1/6666 a.txt &"); 

它给出输出[1] 21970,pid。

然后,如果我按下另一个输入,它使输出

[1]+ Stopped     ./flute-static -send -a232.0.0.1/6666 a.txt 

很显然它不能发送数据。我该如何解决这个问题。请帮帮我。提前致谢。

+1

您可以在前台启动进程(没有&),然后在输入凭据后将其发送到后台(在bash下:按ctrl-z,然后键入bg,然后返回)。但这不是编程问题... – sergio 2014-10-20 11:14:28

+2

这不是一个编程问题,属于[unix](http://unix.stackexchange.com/)站点。但是答案可能是你试图做一些没有道理的事情 - 如果程序需要从标准输入读取输入,你需要将它的标准输入附加到提供输入的东西上。 – geoffspear 2014-10-20 11:14:31

+0

对不起,误会。其实我正在用system()函数从c程序运行它。我修改了这个问题。 @sergio现在可以帮我吗? – JatiA 2014-10-20 11:26:27

您可以尝试nohup

iStatus = system("nohup ./flute-static -send -a232.0.0.1/6666 a.txt &"); 

NOHUP是指:不终止,即使stty的被切断了这一过程。

或者您可以使用screen

https://www.mattcutts.com/blog/a-quick-tutorial-on-screen/

+0

谢谢。我尝试了,但它给了以下错误“[2] - 退出255 nohup ./flute-static -send -a232.0.0.1/6666 JFlute.1.2.tar.gz”。 – JatiA 2014-10-20 11:29:21

阅读Advanced Linux Programming和有关fork system call;您肯定希望使用fork(2),execve(2),waitpid(2)与其他一些syscalls(2)和/或可能daemon(3)和/或popen(3)。可能在flute-static程序上使用strace(1)可能会帮助您更多地了解它。

顺便说一句,你可能会使用一些FLUTE library(从源代码编译MAD-ALCLIB!),或者干脆使用HTTP & FTP客户端库像libcurl

不管你做什么,如果转到后台进程正在读取标准输入,它停止(见​​,tty(4)等)!请阅读tty demystified

+0

谢谢。我必须使用flute协议和你提供的链接中可用的二进制文件,在fedora 19中不起作用。我正在使用另一个二进制文件。如果你稍微解释第一点,这将非常有帮助。 – JatiA 2014-10-20 11:42:28

+0

您需要花几个小时才能阅读参考文献。我没有很多时间(几小时或几天)来解释你在很多书籍和资源中很好地解释了什么。 – 2014-10-20 11:43:50