Previously encountered Kill (PID, 0) situation, due to the usual did not notice the KILL function of the shape parameter 0, do not know its role. A description of the next kill function is viewed with the Man 2 Kill command, and is found to detect the presence of the process.
Man 2 Kill View a description of parameter 0
1 Description of Kill 0 1
From the text in the description area above, you can see that the parameter sig in the Kill function is 0, so no signal is sent to the PID process, but the error continues to be detected (process ID or process group ID exists). The return value of the Kill function and the specific error message are as follows:
Return VALUE
On success (in least one signal was sent), the zero is returned. On Error,-1
is returned, and errno is set appropriately.
ERRORS
Einval an invalid signal is specified.
Eperm the process does not have permission to send the signal to any of the
Target processes.
Esrch the PID or process group does not exist. Note this an existing
Process might be a zombie, a process which already committed Termina?
tion, but has not yet been wait (2) Ed for.
2 Simple test procedure
#include <stdio.h>
#include <signal.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#define GO_FREE (P) \
Free (p); \
p = NULL; \
printf ("exit.\n");
int main (int argc, char **argv)
{
if (argc!= 2)
{
; printf ("Usage:%s%s\n", Argv[0], "pid");
Exit (-1);
}
Char *p = (char *) malloc (sizeof (char) * 20);
memcpy (P, argv[1], strlen (argv[1));
/**
* No signal is sent, but error checking is still performed;
* This can is used to check for the existence of a process ID or process group ID.
*/
if (Kill (Atoi (p), 0) = = 1)
{
Perror ("error");
}
Else
{
printf ("signal[%s] exist.\n", p);
}
Go_free (P);
return 0;
}
3 Test Execution
Use the makefile file in the article "Common Makefile for generating elf, dynamic/static library files in Linux C + + project" To compile the program, of course, you can also compile GCC using the command chk_signal_exist.c-o Chk_signal_ Exist
First Test the process does not exist: Randomly enter a process ID (23232) as parameter 1
Then test the existence of the process: first use the PS command to view the existing process Daemon_sleep1 (20608), and then pass as parameter 1 to the
4 Other Notes
There is information on the Internet that 0 represents the signal 0, but the use of command kill-l did not show, so here personally feel should not be called signal 0. It is only a normal parameter in the KILL function, when greater than 0 sends the corresponding signal to a process, equal to 0 when the detection of a process exists