How to stop a screen process in linux?
I am running a script on a remote server. I ran the script in screen , however I need to stop it before it completes since I need to update the script. I can easily detach from screen , however, is there a way to kill a screen process?
Do you really want to kill screen(1) ? Or would you rather kill the process you started inside screen(1) ?
5 Answers 5
CTRL+a and then ‘k’ will kill a screen session.
Thank you! I just added a Terminal Hotkey that goes «\001ky» (Ctrl-A, k and y for «yes»). On a far note, I have a hotkey bound to the «Home» key that goes «cd ~/ Enter» 😆 There’s no place like cd ~/
There are a couple of ‘screen’ ways to kill a specific screen session from the command line (non-interactively).
screen -X -S "sessionname" quit
2) send a Ctrl-C to a screen session running a script:
screen -X -S "sessionname" stuff "^C"
In both cases, you would need to use ‘screen -ls’ to find the session name of the screen session you want to kill . if there is only one screen session running, you won’t need to specify the -S «sessionname» parameter.
I used this to quit hundreds of erroneous screen sessions created by a buggy command:
for s in $(screen -ls|grep -o -P «1\d+.tty»); do screen -X -S $s quit; done;
where: the grep -o -P «1\d+.tty» is the command to get session names with Perl-like name regex «1\d+.tty» which captures all sessions start with number 1 , has some other numbers ( \d ) and end with .tty
Warning: You should test with this command first to see you get the exact list of sessions you want before apply the above command. This is to avoid quitting unwanted sessions:
for s in $(screen -ls|grep -o -P «1\d+.tty»); do echo $s; done;
I always to this echo test whenever the list in for loop is not clear, for example, the one generated by sub-command in $() expansion.
kill a screen session
I’m trying to kill a screen session. I noticed a lot of other related questions, but none of those answers are working for me. I am trying to kill the following session:
screen -ls There is a screen on: 23520.pts-6.porkypig (09/30/2013 02:49:47 PM) (Detached) 1 Socket in /var/run/screen/S-root. screen -r 23520.pts-6.porkypig
Now I am in the session. According to the documentation: http://www.gnu.org/software/screen/manual/screen.html#Quit I am supposed to press «control a» and then «control \». I do that and nothing happens. Another solution said to press Ctrl + a and type :quit. However, again it doesn’t do anything. In fact, pressing control + a , absolutely nothing happens afterwards except a message «No Other Window»
in screen v4.x, to kill all sessions, ps aux | grep «SCREEN» | awk ‘
For the record, you can just do screen -r porkypig or screen -r 23520 , rather than having to include the full string. Screen names are supposed to make things easier, not more complicated.
13 Answers 13
- Rationale: -X = Execute command, -S session PID to execute on
- Example: screen -XS 20411 quit
- Source: innaM’s Answer
i like this one too. plus can always throw it in a loop to get rid of all sessions if needed: for session in $(screen -ls | grep -oP ‘\d+\.\w+’ | cut -d. -f1); do screen -S «$
first you need to re attach to the screen session
screen -r 23520 as you have done. Then press ctrl + a and then a k and press y when it asks if you really want to kill the session
This works if there is a problem with a process running inside the screen, but not if there is a problem with screen itself. That is the case 99% of the time, and has the added benefit of only affecting a single window within the screen rather than terminating all windows.
This command will kill all screen sessions, if that is desired:
So with all those official suggestions, I have one here that i feel is easier, and just as effective, and kind of more straight forward:
Who wants to go into an unknown and un-needed screen just to press in a couple commands that most might barely remember? This avoids going into it at all, and kills it straight off.
Plus, if you have more than one, this will take them all in one fell swoop.
Not a good choice. I’ve been doing it for some time. Sometimes it causes bad behaviors (e.g. logging out from your user account immediately). Also, as @Mikkel mentioned, it could cause to close all your screens, which would not be what you want. Sometimes you need to keep running some (e.g. some are running by system) and stop some other screens.
This will kill all the detached screens:
screen -ls | grep detached | cut -d. -f1 | awk '' | xargs kill
This will kill all screens, attached or detached
screen -ls | grep pts | cut -d. -f1 | awk '' | xargs kill
Like you, I wanted to kill my screen session and found the documentation unhelpful. Convinced that there must be a keyboard shortcut, I found that
ctrl + a then \
works
I then get the prompt: «Really quit and kill all your windows [y\n]»
I am not sure why the documentation says ctrl + a then ctrl + \ . That doesn’t do anything for me.
we can also use the exit command to terminating screen
Easiest and most straightforward approach! You will, of course, first need to reattach to the screen session.
I encountered this problem when updating screen. The screen command would hang when attempting to reattach the session, regardless of how many -D or -R I added to the command. However, screen -ls conveniently provides the pid of the session, allowing you to intervene using the following:
10:42 user ~ $ screen -ls There is a screen on: 5730.my_screen (Detached) 1 Socket in /tmp/screens/S-user. 10:42 user ~ $ sudo kill 5730 10:43 user ~ $ screen -ls No Sockets found in /tmp/screens/S-user.
(This is similar to Brian Thomas’s answer, but his will kill all running screen sessions, which may not be what you want if you have multiple screens open but only one misbehaving.)
After 6 hours breaking my head all over internet. yours was the only answer that worked. Thanks mate!
You can find the process id of the attached running screen. I found it same as the session id which you can get by command:
screen -ls
And you can use following command to kill that process:
kill [sessionId] or
sudo kill [sessionId]
You can kill the screen even if it is attached on some other terminal window.
You can use this to kill a session
Press ctrl+d to kill screen window. Repeat this until you kill all screen windows. Once you ran out all windows screen will kill the session and terminating. Shortest solution if you not having many windows
You can just simply type exit while in a recording mode, I found out it to be most convenient as it directly exits the running screen.
Simply, use the exit command inside a screen window and if you have a running process press control + z before that.
This doesn’t answer the question (how to kill a screen session, as opposed how to exit normally) and it doesn’t expand on the other answers. A good answer might cover the normal exiting procedure and then document a few ways you can kill screen if that doesn’t work.
I believe what is being asked is how to ‘quit’ a screen session from within screen itself. This would kill all open terminals in the session and leave the user at the prompt for the parent terminal. The session can be suspended from within using CTRL-A, CTRL-Z. But this creates a a problem I’m trying to avoid which is leaving a bunch of opened screen sessions over time and then not knowing which ones are truly active and which ones I should have closed.
After lots of looking, I believe there is no way to do this. Killing them using the PID method is ok, but if there are many sessions open, some of which I might be using, I don’t always know which ones to kill.
So what I do when I’m truly done with a screen session is to repeatedly hit CTRL-d to close each terminal individuly until the session completely exits.
This is the best solution I’ve found.
You must log in to answer this question.
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.12.43529
Ubuntu and the circle of friends logo are trade marks of Canonical Limited and are used under licence.
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Kill Attached Screen in Linux
I created a screen «myscreen» in linux and it stopped responding abruptly. I closed the terminal and tried to reopen it. «screen -ls» shows that the screen is Attached. I tried the following commands but nothing responds.
screen -r myscreen screen -D myscreen screen -D -RR myscreen screen -X -S myscreen quit
I am not sure if screen is a process. But «kill -9» will kill the entire process. But i want to kill the particular screen and leave the other screens uninterrupted.
11 Answers 11
alternatively, you can use the following command
screen -S SCREENNAME -p 0 -X quit
You can view the list of the screen sessions by executing screen -ls
I notice the first command sequence only kills the last window if you have multiple windows open while the second actually kills the entire screen regardless of the number of windows.
Create screen from Terminal:
To go to particular screen:
give ctrl+d screen will get terminated
give or screen will get detached
To kill a screen from Terminal:
You can use screen_name or process_id to execute commands.
This worked for me very well. Get the screen id via:
then kill the screen: kill -9 it now becomes a dead screen, then wipe it out with: screen -wipe
Reattach a session and if necessary detach it first
To kill a detached screen use this from the terminal:
screen -X -S "SCEEN_NAME" quit
If you are attached, then use (from the terminal and inside the screen):
You could create a function to kill all existing sessions. take a look at Kill all detached screen sessions
to list all active sessions use screen -r
when listed, select with your mouse the session you are interested in and paste it. like this
Suppose your screen id has a pattern. Then you can use the following code to kill all the attached screen at once.
result=$(screen -ls | grep 'pattern_of_screen_id' -o) for i in $result; do `screen -X -S $i quit`; done
i usually don’t name my screen instances, so this might not be useful, but did you try screen -r without the ‘myscreen’ part? usually for me, screen -r will show the PIDs of each screen then i can reattach with screen -d -r
Yes, that was the first command I tried. but it didn’t respond. I tried to open as root user but the screen was not even detected for root user account.
You can find the process id of the attached running screen. I found it same as the session id which you can get by command:
screen -ls
And you can use following command to kill that process:
kill [sessionId] or
sudo kill [sessionId]
None of the screen commands were killing or reattaching the screen for me. Any screen command would just hang. I found another approach.
Each running screen has a file associated with it in:
The files in that folder will match the names of the screens when running the screen -list . If you delete the file, it kills the associated running screen (detached or attached).