Speak now
Please Wait Image Converting Into Text...
Embark on a journey of knowledge! Take the quiz and earn valuable credits.
Challenge yourself and boost your learning! Start the quiz now to earn credits.
Unlock your potential! Begin the quiz, answer questions, and accumulate credits along the way.
General Tech Bugs & Fixes 2 years ago
Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.
Turn Your Knowledge into Earnings.
I have a script spawning two zombies. I can kill the group via kill -- -, but when invoked by the PHP interpreter, that won’t work although killing every single process manually will.
kill -- -
The script is
#!/bin/bash sleep 1d& sleep 1d
and the PHP file just invokes it:
From the shell directly:
$ ./spawn& [1] 19871 $ pstree -p 19871 spawn(19871)─┬─sleep(19872) └─sleep(19873) $ kill -- -19871 $ pstree -p 19871 [1]+ Terminated ./spawn
... and via PHP:
$ php -f zomby.php & [1] 19935 $ pstree -p 19935 php(19935)───sh(19936)───spawn(19937)─┬─sleep(19938) └─sleep(19939) $ kill -- -19937 bash: kill: (-19937) - No matching process found $ kill -- -19936 bash: kill: (-19936) - No matching process found $ kill 19939 19938 19937 $ Terminated [1]+ Fertig php -f zomby.php
only killing the PHP parent process will work:
$ php -f zomby.php & [1] 20021 $ pstree -p 20021 php(20021)───sh(20022)───spawn(20023)─┬─sleep(20024) └─sleep(20025) $ kill -- -20021 $ pstree -p 20021 [1]+ Terminated php -f zomby.php
Any ideas on that?
The kill command, when given a PID that is < -1, treats it as a process group ID (PGID), not as a process ID. This is documented in info kill:
kill
info kill
‘PID < -1’ The process group whose identifier is −PID.
If we take your example again:
$ pstree -p 19935 php(19935)───sh(19936)───spawn(19937)─┬─sleep(19938) └─sleep(19939)
The PGID is the PID of the topmost parent process of the process tree, in this case 19935. However, you tried to kill the processes belonging to the process group with ID 19937 and 19936, Neither of which are actually process group IDs. The PGID is 19935.
19935
19937
19936
You can perhaps see this more clearly with ps. If I run the same commands on my system:
ps
$ php -f ./zombie.php & [2] 12882 $ ps -o pid,ppid,pgid,command | grep -E '[P]GID|[1]2882' PID PPID PGID COMMAND 12882 1133 12882 php -f ./zombie.php 12883 12882 12882 /bin/bash ./spawn 12884 12883 12882 sleep 1d 12885 12883 12882 sleep 1d
In the example above, the PGID of the group is 12882, so that's what I need to use if I want to kill everything in the group.
12882
When you run the command from the shell directly, the topmost parent process is the PID of the shell script, so you can kill all processes in its tree by running kill -- -PID:
kill -- -PID
$ ./spawn & [3] 14213 terdon@tpad foo $ ps -o pid,ppid,pgid,command | grep -E '[P]GID|[1]4213' PID PPID PGID COMMAND 14213 1133 14213 /bin/bash ./spawn 14214 14213 14213 sleep 1d 14215 14213 14213 sleep 1d
But that's because the PID of the shell script is the PGID of the group.
No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.
General Tech 10 Answers
General Tech 7 Answers
General Tech 3 Answers
General Tech 9 Answers
General Tech 2 Answers
Ready to take your education and career to the next level? Register today and join our growing community of learners and professionals.