wizard:run graham$ ls *.pid
DirectoryService.pid
configd.pid
diskarbitrationd.pid
hdiejectd.pid
httpd.pid
mds.pid
ntpd.pid
racoon.pid
syslog.pid
wizard:run graham$
When a process that needs to be contacted / alerted by other processes is started, it often records its process id (PID) into a ".pid file" so that those other processes know where to find it. The files above are form the /var/run directory on my OS X machine and point to system daemons, but it's a scheme that you may use for your own service processes (daemons) too. Have a look at these files ... and you'll just find a number in each of them.
Here's an example of how a newly starting daemon can log its pid (in Perl):
open(FH,">","/var/run/nonfat.pid") and print FH "$$\n" and close FH;
And then how another process can check its most recent process ID, and whether it's running:
open(FH,"/var/run/nonfat.pid");
chomp($nfpid = <FH>);
if ( kill 0,$nfpid ) { ...
Perl's
kill function isn't as dramatic as it sounds - I sometime find that my classes are surprised to learn that killing is not always fatal. It should, really, have been called the "signal" command and with a zero first parameter it doesn't even send a signal - it just checks to see whether the process of the particular ID is there and running.
Once you've established that a process you want to alert
is running, you can send it a proper signal:
kill "USR1",$nfpid;
Source code examples ...
[sending signal] and
[receiving and handling signals].
(written 2010-10-23)
Associated topics are indexed under
P223 - Perl - Interprocess Communication [3412] Handling binary data in Perl is easy! - (2011-08-30)
[3010] Children, zombies, and reaping processes - (2010-10-23)
[2970] Perl - doing several things at the same time - (2010-09-25)
[2694] Multiple processes (forking) in Python - (2010-03-25)
[1918] Perl Socket Programming Examples - (2008-12-02)
[604] Perl - multiprocess applications - (2006-02-13)
A164 - Web Application Deployment - Services and Regular Jobs [3143] On time - (2011-01-23)
[2182] What Linux run level am I in? - (2009-05-15)
[2145] Using the internet to remotely check for power failure at home (PHP) - (2009-04-29)
[1903] daemons - what is running on my Linux server? - (2008-11-23)
[1765] Dialects of English and Unix - (2008-08-21)
[1733] memcached - overview, installation, example of use in PHP - (2008-08-02)
[1731] Apache httpd, MySQL, PHP - installation procedure - (2008-08-01)
[1700] FTP server on Fedora Linux - (2008-07-06)
[1633] Changing a screen saver from a web page (PHP, Perl, OSX) - (2008-05-06)
[1553] Automatic startup and shutdown of Tomcat - (2008-02-24)
[1288] Linux run states, shell special commands, and directory structures - (2007-08-03)
[1028] Linux / Unix - process priority and nice - (2007-01-10)
[907] Browser -> httpd -> Tomcat -> MySQL. Restarting. - (2006-10-28)
[544] Repeating tasks with crontab - (2005-12-27)
Some other Articles
Logging the performance of the Apache httpd web serverWell House Manor - the next six yearsAudio equipmentException handling in Perl - using evalWhat are .pid files?Expect in Perl - a short explanation and a practical example Dulwich College Preparatory, and Sevenoaks, SchoolsSetting up a matrix of data (2D array) for processing in your programSanta announcement, 5th December 2010, Melksham