我在后台运行了一个多线程程序:
./my_task &
然后我注销,然后再次登录。Nowjobs
命令不显示该程序,但显示该程序top
的线程。所以它仍在运行。如何阻止它?我想我可以杀死每个线程,但是其中有很多,我不知道它会如何影响my_task
程序。
我正在使用 Debian Squeeze。
我在后台运行了一个多线程程序:
./my_task &
然后我注销,然后再次登录。Nowjobs
命令不显示该程序,但显示该程序top
的线程。所以它仍在运行。如何阻止它?我想我可以杀死每个线程,但是其中有很多,我不知道它会如何影响my_task
程序。
我正在使用 Debian Squeeze。
在一般情况下,您可以使用
ps aux | grep my_task
- 或者,如果您知道,该进程名称正好以“my_task”开头:
ps aux | grep [m]y_task
(这将从结果表中排除grep
进程本身)
获得所需的进程ID(让它成为$pid
),然后用kill $pid
编辑(感谢下面的评论):jobs
是bash
其自身的一部分,因此有关它的信息列在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.
但这无济于事,因为它只会列出当前实例的作业(当然,当您更改会话时会更改)
您可以使用pgrep
以下命令查找:
$ pgrep my_task
4384
然后您可以使用该输出来确保它是您想要的命令:
$ ps -fp 4384 | cat
我将输出通过管道传输到,cat
因为该ps
命令将在终端的行大小处截断输出,除非它通过管道传输到另一个命令。
您也可以将它们组合起来:
$ ps -fp $(pgrep my_task) | cat
pkill
如果你很勇敢,你也可以使用:
$ pkill my_task
这将杀死与用户拥有的正则表达式匹配的所有进程my_task
。
使用日志运行您的进程。例如,我使用了 gnome-calculator:
gnome-calculator & echo $! > tmp/11/mylog
并在下面添加.bashrc
或其他自动启动以杀死它:
kill `cat tmp/11/mylog`