How PM2 Works: The Process Manager That Keeps Your Apps Alive
Have you ever run a Node.js app on a server, only to watch it crash a few hours later due to an unexpected error? Or maybe youโve used nohup or screen to keep a script running in the background, only to forget it exists?
Thatโs where PM2 comes in-a smart, modern process manager designed to make your life easier by keeping your apps alive, managing logs, and even auto-starting your apps on system boot.
In this post, letโs break down how PM2 works, what it can do, and why itโs such a popular tool in the Node.js and backend developer world.
๐ก What Is PM2?
PM2 (short for โProcess Manager 2โ) is a lightweight, open-source process manager for Node.js applications-but it also works with any other executable script (like Python, Bash, Go, PHP).
It helps you:
- Keep apps running forever
- Restart automatically on crashes
- Monitor performance (CPU, RAM)
- View logs easily
- Auto-start apps on server reboot
- Load-balance across CPU cores
And best of all-itโs just a single command-line tool you install globally:
npm install -g pm2
๐ ๏ธ How Does PM2 Work?
PM2 runs as a daemon in the background. When you start an app with PM2, it doesnโt just run your script-it:
- Forks your app into its own background process
- Watches that process for crashes or high memory use
- Restarts it if it dies or exceeds limits
- Logs everything to disk for easy debugging
- Keeps track of which apps should be auto-started on boot
This means you can close your SSH session or even reboot your server-and PM2 will bring your apps back to life without you doing anything.
๐ The Lifecycle of an App in PM2
Hereโs what happens step-by-step when you run:
pm2 start app.js
- PM2 forks your app into a child process
- It records the process in its internal list
- PM2 monitors the process: CPU, memory, uptime, logs
- If the app exits unexpectedly, PM2 immediately restarts it
- If you reboot the server, PM2 can reload it automatically (after you run
pm2 startupandpm2 saveonce)
This makes it ideal for production use, or even for bots, APIs, or any long-running script.
๐งฐ Key Features of PM2
โ Keeps Apps Running Forever
Your app crashes at 2am? PM2 restarts it instantly-no downtime.
๐ Auto-Start on Reboot
Set up a startup script so PM2 restores all your apps after a server reboot:
pm2 startup
pm2 save
๐ Real-Time Monitoring
pm2 monit
View live CPU/RAM usage for each app.
๐ Centralized Logs
pm2 logs
No more digging around for log files. PM2 keeps logs per app and shows them live.
๐ Load Balancing with Clusters
You can spawn multiple instances of your app to utilize all CPU cores:
pm2 start app.js -i max
Perfect for improving performance and resilience.
๐ PM2 Works with More Than Node.js
Even though PM2 was built for Node.js, you can run any type of app or script:
- Python:
pm2 start script.py --interpreter python3 - Bash:
pm2 start myscript.sh - PHP:
pm2 start app.php --interpreter php
Itโs very flexible and language-agnostic.
๐ค When Should You Use PM2?
- Running a backend API or server
- Hosting a long-running bot or process
- Deploying Node.js, Python, or Go scripts
- Wanting crash recovery without systemd or Docker
- Needing one-liner control for logs, restarts, uptime
If you’re running an app for more than a few minutes-itโs worth using PM2.
๐งผ Wrapping Up
PM2 is like a smart assistant for your apps-it keeps them running, watches them, restarts them if anything goes wrong, and gives you tools to manage everything with a few simple commands.
Whether youโre managing one app or ten, PM2 gives you peace of mind and control in a way that nohup, screen, or manual scripts just can’t.
It works quietly in the background so your app doesn’t have to shout for help.



Post Comment