Labels

Android (1) bash (2) boost (2) C (34) C++ (2) cheatsheet (2) CLion (6) css (3) Debian (33) DL (17) Docker (1) Dreamweaver (2) Eclipse (3) fail2ban (4) git (5) GitHub (4) Hacking (3) html (8) http (1) iOS (1) iPad (1) IRC (1) Java (30) javascript (3) Linux (164) Mac (19) Machine Learning (1) mySQL (47) Netbeans (4) Networking (1) Nexus (1) OpenVMS (6) Oracle (1) Pandas (3) php (16) Postgresql (8) Python (9) raid (1) RedHat (14) Samba (2) Slackware (45) SQL (14) svn (1) tar (1) ThinkPad (1) Virtualbox (3) Visual Basic (1) Visual Studio (1) Windows (2)

Wednesday 21 April 2021

Properly stopping an application without using monit.

Issue: Application that should not have been running had been started using monit and then stopped using monit.



The application in this example was SDL

 
The issue was that the logs were being filled with TIMER errors such as;


EVNT IPM TX msgsnd TIMER to SDL FAILED - Probably too big : queue 229383    EVENT


This was making it difficult to read genuine and other more interesting logs.

In the code for SDL was the following;


case -999:
                    logger.write("SDL", "MAIN", LOGTYPE_EVENT, "Shutdown message...");
                    ipm.SendIPM("TIMER", 0, 0, 101, 0); // Cancel timer

                    shutdown = true;
                    break;



So an attempt to fix was to try and restart the application using monit and then send an ipm -999 as following;

sendipm SDL 00 -999 000

This initially appeared to work but obviously monit would then restart the application and perhaps hide the fact that this method wasn't working as intended.

When I eventually stopped SDL using monit, the errors reappeared.

The proper fix was to start the application from the command line and send the -999 message, which actually kills the application anyway.


This can be verified by running ipmview which should not show any messages waiting for SDL

No comments:

Post a Comment

Note: only a member of this blog may post a comment.