3

我在后台运行了一个多线程程序:

./my_task &

然后我注销,然后再次登录。Nowjobs命令不显示该程序,但显示该程序top的线程。所以它仍在运行。如何阻止它?我想我可以杀死每个线程,但是其中有很多,我不知道它会如何影响my_task程序。

我正在使用 Debian Squeeze。

4

3 回答 3

4

在一般情况下,您可以使用

ps aux | grep my_task

- 或者,如果您知道,该进程名称正好以“my_task”开头:

ps aux | grep [m]y_task

(这将从结果表中排除grep进程本身)

获得所需的进程ID(让它成为$pid),然后用kill $pid

编辑(感谢下面的评论):jobsbash其自身的一部分,因此有关它的信息列在man bash页面中:

作业控制是指有选择地停止(暂停)进程的执行并在以后继续(恢复)它们的执行的能力。用户通常通过由操作系统内核的终端驱动程序和 bash 共同提供的交互界面来使用此功能。

   The  shell  associates a job with each pipeline.  It keeps a table of currently executing jobs, which may
   be listed with the jobs command.  When bash starts a job asynchronously (in the background), it prints  a
   line that looks like:

          [1] 25647

   indicating  that  this  job  is  job number 1 and that the process ID of the last process in the pipeline
   associated with this job is 25647.  All of the processes in a single pipeline are  members  of  the  same
   job.  Bash uses the job abstraction as the basis for job control.

但这无济于事,因为它只会列出当前实例的作业(当然,当您更改会话时会更改)

于 2013-09-17T12:23:54.930 回答
1

您可以使用pgrep以下命令查找:

$ pgrep my_task
4384

然后您可以使用该输出来确保它是您想要的命令:

$ ps -fp 4384 | cat

我将输出通过管道传输到,cat因为该ps命令将在终端的行大小处截断输出,除非它通过管道传输到另一个命令。

您也可以将它们组合起来:

$ ps -fp $(pgrep my_task) | cat

pkill如果你很勇敢,你也可以使用:

$ pkill my_task

这将杀死与用户拥有的正则表达式匹配的所有进程my_task

于 2013-09-17T14:27:25.090 回答
1

使用日志运行您的进程。例如,我使用了 gnome-calculator:

gnome-calculator & echo $! > tmp/11/mylog

并在下面添加.bashrc或其他自动启动以杀死它:

kill `cat tmp/11/mylog`
于 2013-09-17T12:34:56.820 回答