How to get the process ID to kill a nohup process?

前端 未结 13 1841
醉酒成梦
醉酒成梦 2020-11-27 08:53

I\'m running a nohup process on the server. When I try to kill it my putty console closes instead.

this is how I try to find the process ID:

ps -ef |         


        
相关标签:
13条回答
  • 2020-11-27 09:32

    When using nohup and you put the task in the background, the background operator (&) will give you the PID at the command prompt. If your plan is to manually manage the process, you can save that PID and use it later to kill the process if needed, via kill PID or kill -9 PID (if you need to force kill). Alternatively, you can find the PID later on by ps -ef | grep "command name" and locate the PID from there. Note that nohup keyword/command itself does not appear in the ps output for the command in question.

    If you use a script, you could do something like this in the script:

    nohup my_command > my.log 2>&1 &
    echo $! > save_pid.txt
    

    This will run my_command saving all output into my.log (in a script, $! represents the PID of the last process executed). The 2 is the file descriptor for standard error (stderr) and 2>&1 tells the shell to route standard error output to the standard output (file descriptor 1). It requires &1 so that the shell knows it's a file descriptor in that context instead of just a file named 1. The 2>&1 is needed to capture any error messages that normally are written to standard error into our my.log file (which is coming from standard output). See I/O Redirection for more details on handling I/O redirection with the shell.

    If the command sends output on a regular basis, you can check the output occasionally with tail my.log, or if you want to follow it "live" you can use tail -f my.log. Finally, if you need to kill the process, you can do it via:

    kill -9 `cat save_pid.txt`
    rm save_pid.txt
    
    0 讨论(0)
  • 2020-11-27 09:35

    I started django server with the following command.

    nohup manage.py runserver <localhost:port>
    

    This works on CentOS:

    :~ ns$netstat -ntlp
    :~ ns$kill -9 PID 
    
    0 讨论(0)
  • 2020-11-27 09:36

    if you are on a remote server, check memory usage with top , and find your process and its ID. After that, just execute kill [your process ID] .

    0 讨论(0)
  • 2020-11-27 09:41

    Suppose you are executing a java program with nohup you can get java process id by

    `ps aux | grep java`
    

    output

    xxxxx     9643  0.0  0.0  14232   968 pts/2   
    

    then you can kill the process by typing

    sudo kill 9643
    

    or lets say that you need to kill all the java processes then just use

    sudo killall java
    

    this command kills all the java processors. you can use this with process. just give the process name at the end of the command

    sudo killall {processName}
    
    0 讨论(0)
  • 2020-11-27 09:42

    I am using red hat linux on a VPS server (and via SSH - putty), for me the following worked:

    First, you list all the running processes:

    ps -ef
    

    Then in the first column you find your user name; I found it the following three times:

    • One was the SSH connection
    • The second was an FTP connection
    • The last one was the nohup process

    Then in the second column you can find the PID of the nohup process and you only type:

    kill PID 
    

    (replacing the PID with the nohup process's PID of course)

    And that is it!

    I hope this answer will be useful for someone I'm also very new to bash and SSH, but found 95% of the knowledge I need here :)

    0 讨论(0)
  • 2020-11-27 09:43

    Today I met the same problem. And since it was a long time ago, I totally forgot which command I used and when. I tried three methods:

    1. Using the STIME shown in ps -ef command. This shows the time you start your process, and it's very likely that you nohup you command just before you close ssh(depends on you) . Unfortunately I don't think the latest command is the command I run using nohup, so this doesn't work for me.
    2. Second is the PPID, also shown in ps -ef command. It means Parent Process ID, the ID of process that creates the process. The ppid is 1 in ubuntu for process that using nohup to run. Then you can use ps --ppid "1" to get the list, and check TIME(the total CPU time your process use) or CMD to find the process's PID.
    3. Use lsof -i:port if the process occupy some ports, and you will get the command. Then just like the answer above, use ps -ef | grep command and you will get the PID.

    Once you find the PID of the process, then can use kill pid to terminal the process.

    0 讨论(0)
提交回复
热议问题