一个简单的问题,谁知道...
我想在 Linux shell (ssh2) 中运行一个程序我用“&”运行程序所以它应该在后台运行
但是当我结束会话时,程序中止。
我怎样才能让程序运行到完成并在我重新连接时能够 fg 它?
我使用nohup如下所述在后台启动了我的 Python 程序-
nohup zook.py &
Run Code Online (Sandbox Code Playgroud)
现在我试图终止这个进程,所以我ps执行了下面提到的命令
root@phxdbx1145:/home/david/zook# ps ax | grep zook.py
16352 pts/6 S+ 0:00 grep --color=auto zook.py
Run Code Online (Sandbox Code Playgroud)
但不知何故,每次它的 PID 改变时,我都不知道为什么。每当我喜欢这样 -
kill -9 16352
Run Code Online (Sandbox Code Playgroud)
它总是说,No Such Process。
当我再次执行 px 命令时,我看到 PID 自动更改了..
所以我不确定如何终止这个进程?
有什么办法可以以某种方式终止带有名称的进程吗?
我试过
killall zook.py
但它对我不起作用,我得到 -
zook.py: no process found
Run Code Online (Sandbox Code Playgroud)
还有其他选择吗?不知何故,它的 PID 每次都会改变.. 所以我不能使用kill -9 pid
更新:-
这就是我得到的。我做了pkill -9 zook.py然后我做了下面提到的 ps 命令,它不断地显示 zook.py ?
root@dbx1145:/home/david/zook# pkill -9 zook.py
root@dbx1145:/home/david/zook# ps ax | grep zook.py
23870 …Run Code Online (Sandbox Code Playgroud) 在过去的几个月里,我一直在学习 bash 和 linux 管理,同时生成越来越多需要在后台运行的代码。理想情况下,我希望将我的开发系统运行在离生产环境更近的地方,以避免由于安全和权限问题而不得不重新开发代码。
一般来说,我会运行一些东西:
$nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)
IE:
$nohup ping 192.168.0.1 >> ping.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)
但是,今天我尝试通过创建一个用户并授予他们正确的权限来正确设置它,以便只能访问他们自己的文件而不能访问其他任何内容。这似乎是一种明智的安全做法。
我会这样做:
$sudo -u <program user> nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时,这会导致以下输出ps aux | grep <program>:
<admin user>@server:~$ ps aux | grep <program>
root 1396 0.0 0.0 61868 3792 pts/38 S 10:50 0:00 sudo -u <program user> nohup <program> <program args>
<program user> 1397 0.0 0.8 1273232 68308 pts/38 …Run Code Online (Sandbox Code Playgroud) 有时我注意到服务器运行缓慢,在那些时候 aps -e显示logger并tee正在运行,但我想不出为什么。这是一个已知的问题?为什么这些需要在不被调用的情况下运行?发生这种情况时,运行的系统很少,但可能与运行 Chromium 有某种联系,但我不确定。