Linux 如何找到自己执行的后台工作
我们可以使用Linux 如何找到自己执行的后台工作,linux,ubuntu,Linux,Ubuntu,我们可以使用&使bash在后台执行,例如,livereload&,php-S localhost:8000&,但是如果我离开终端忘记终止该过程,它将始终在那里,直到重新启动,我可以使用命令作业检查我执行的bash,但是,如果我打开一个新的终端或再次登录,作业-l将为空,下次登录时谁来查找它。如果使用&,这会将进程置于后台;但是,该进程仍然附加到该特定终端(更具体地说,是执行该命令的活动shell)。当您退出该终端(或注销该shell)时,进程将被终止。(见:) 退出该shell时进程不会被终止的
&
使bash在后台执行,例如,livereload&
,php-S localhost:8000&
,但是如果我离开终端忘记终止该过程,它将始终在那里,直到重新启动,我可以使用命令作业检查我执行的bash,但是,如果我打开一个新的终端或再次登录,作业-l
将为空,下次登录时谁来查找它。如果使用&
,这会将进程置于后台;但是,该进程仍然附加到该特定终端(更具体地说,是执行该命令的活动shell)。当您退出该终端(或注销该shell)时,进程将被终止。(见:)
退出该shell时进程不会被终止的情况是,该进程派生了一个子进程,而该子进程现在由init(PPID 1)拥有。livereload&
可能就是这种情况
您还可以将当前在前台运行的进程放置到后台,方法是点击Ctrl-Z
,将您带回shell,同时暂停(而不是终止)进程,然后键入bg
,然后在后台继续执行该进程
当您运行&
,或者使用Ctrl-z
和bg
将进程移到后台时,您可以通过键入fg
将其移回前台。此时,您可以使用Ctrl-c
杀死它
不过,一般来说,要查找已分离的正在运行的进程,可以使用
ps -f | grep <name of the command> | grep -v grep
或
这一行程序的工作方式是,它是grep
s您的历史记录,它的结尾是&
,例如
现在,您甚至可以再次将其导入xargs
,以终止这些进程(如果您确信它们是正确的)。如果要验证,可以运行
mgr@tesla:~$ ps -p 90448 -o comm=
sleep
或
如果使用&
,则会将流程置于后台;但是,该进程仍然附加到该特定终端(更具体地说,是执行该命令的活动shell)。当您退出该终端(或注销该shell)时,进程将被终止。(见:)
退出该shell时进程不会被终止的情况是,该进程派生了一个子进程,而该子进程现在由init(PPID 1)拥有。livereload&
可能就是这种情况
您还可以将当前在前台运行的进程放置到后台,方法是点击Ctrl-Z
,将您带回shell,同时暂停(而不是终止)进程,然后键入bg
,然后在后台继续执行该进程
当您运行&
,或者使用Ctrl-z
和bg
将进程移到后台时,您可以通过键入fg
将其移回前台。此时,您可以使用Ctrl-c
杀死它
不过,一般来说,要查找已分离的正在运行的进程,可以使用
ps -f | grep <name of the command> | grep -v grep
或
这一行程序的工作方式是,它是grep
s您的历史记录,它的结尾是&
,例如
现在,您甚至可以再次将其导入xargs
,以终止这些进程(如果您确信它们是正确的)。如果要验证,可以运行
mgr@tesla:~$ ps -p 90448 -o comm=
sleep
或
我确信我运行了livereload或其他东西,我仍然可以在使用ps aux | grep livereload
再次登录时找到它,它没有关闭,我知道ps
使用grep
可以找到它,但是我正在寻找像jobs可以立即显示这样的东西,以防我忘记以前运行过什么这可能很有用:jobs
只显示从同一个shell开始并属于同一个shell的后台命令。是的,我知道,这就是我在这里要问的问题。我要强调的是,livereload
可能是这里的例外,而不是规则。当您使用&
在后台放置某个内容时,它将连接到该shell会话,并在您退出该特定shell时被终止。在livereload的案例中,只需对您的历史记录进行grep,并查找您在后台放置流程的案例,然后在ps aux
或ps-f
中对其进行grep即可。如果您有任何其他示例,其中流程通过简单的&
分离,请提供它们。否则,这听起来像是livereload
-这里的特定案例。我确信我运行了livereload或其他东西,当使用ps aux | grep livereload
再次登录时,我仍然可以找到它,它没有关闭,我知道ps
使用grep
可以找到它,但是我正在寻找像jobs可以立即显示这样的东西,以防我忘记以前运行过什么这可能很有用:jobs
只显示从同一个shell开始并属于同一个shell的后台命令。是的,我知道,这就是我在这里要问的问题。我要强调的是,livereload
可能是这里的例外,而不是规则。当您使用&
在后台放置某个内容时,它将连接到该shell会话,并在您退出该特定shell时被终止。在livereload的案例中,只需对您的历史记录进行grep,并查找您在后台放置流程的案例,然后在ps aux
或ps-f
中对其进行grep即可。如果您有任何其他示例,其中流程通过简单的&
分离,请提供它们。否则,这听起来像是一个livereload
特定的案例。
898 my_script & # <----- you'll only see lines like this
899 ls
900 sleep 10000 & # <----- you'll only see lines like this
901 pwd
mgr@tesla:~$ ps aux | grep sleep
mgr 91040 0.0 0.0 2434836 756 s002 S+ 9:37AM 0:00.00 grep sleep
mgr 90448 0.0 0.0 2434820 340 s002 S 9:24AM 0:00.00 sleep 100000
mgr@tesla:~$ history | grep "&$" | sed "s/&//g" | sed "s/^[ \t]*[0-9]*//g" | sed "s/^[ \t]*//g" | xargs pgrep
90448
mgr@tesla:~$ ps -p 90448 -o comm=
sleep
mgr@tesla:~$ ps aux | grep 90448 | grep -v grep
mgr 90448 0.0 0.0 2434820 340 s002 S 9:24AM 0:00.00 sleep 100000