2010-06-04 158 views
0

我正在学习如何在Linux操作系统平台上编程,以及在后台进程中如何运行我的应用程序。如何在后台进程中运行linux应用程序?

就像在这种情况下的例子:当在shell中执行我的应用程序时,它会自动运行在后台进程中。请注意,当我运行我的应用程序时,我不需要shell中的“&”。什么标准的Linux功能来做这个实现?

我该如何杀死或终止在代码中后台运行的应用程序?我的意思是我不需要执行kill shell命令来在后台终止我的应用程序?或者,如果应用程序符合条件,则会自行终止或自行终止。

非常感谢。

回答

4

你想守护你的程序。这通常由fork()和一些其他系统调用完成。

还有更多的细节here

后台应用程序可以通过使用kill被杀死。守护进程将其进程ID(PID)写入一个众所周知的文件中以便轻松定位是一种很好的做法。

+0

什么,你的意思是我必须保存在一个文件中的应用程序的PID值,这样,如果我要终止的应用程序,我刚才读的价值和使用在同一代码文件中使用kill shell命令杀死应用程序的值? – domlao 2010-06-04 01:57:44

+0

@sasayins:如果你正在从另一个程序(不是脚本)中杀死进程,应该使用'kill(2)'函数。如果你想杀死父进程的子进程,不需要PID文件,因为fork将PID返回给父进程。 – 2010-06-04 02:07:55

1

fork(2)给你一个新的过程。在孩子中,您运行exec(3)函数之一来替换它为新的可执行文件。父母可以使用wait(2)函数之一等待孩子终止。 kill(2)可用于发送信号到另一个进程。

2

虽然你应该了解fork()exec()wait()kill(),它有时会更方便,只需使用daemon(3)如果它存在。

注意事项:

  • 不在POSIX.1-2001
  • 并非存在于所有的BSD的(可能被命名为别的东西,不过)

如果可移植性不是主要问题,这很方便。如果可移植性是一个主要问题,您可以随时编写自己的实现并使用它。

从手册页:

SYNOPSIS 
     #include <unistd.h> 

     int daemon(int nochdir, int noclose); 

DESCRIPTION 
     The daemon() function is for programs wishing to detach themselves from the 
     controlling terminal and run in the background as system daemons. 

     If nochdir is zero, daemon() changes the calling process's current working directory 
     to the root directory ("/"); otherwise, the current working directory is left 
     unchanged. 

     If noclose is zero, daemon() redirects standard input, standard output and standard 
     error to /dev/null; otherwise, no changes are made to these file descriptors.