systemd vs init vs supervisord - Process Managers
A reader asks you to explain process management on Linux, and the interviewer wants to see if you actually know what runs your services versus what memorizes definitions. This question comes up constantly because candidates confuse "process manager" with "init system," and interviewers use it to separate people who've debugged a crashed service at 3AM from people who've only read about it.
The answer interviewers want
Init is the original process manager - the grandfather of the family, running as PID 1. It does simple, sequential process spawning: start service A, then B, then C, with no real concept of dependencies between them and no built-in restart logic.
Systemd replaced init as PID 1 on most modern Linux distros. It models services as units with an actual dependency graph, so independent services can start in parallel instead of waiting in line. The key trick worth remembering: systemd can restart failed services automatically. If something like nginx dies, systemd notices and brings it back without anyone touching a terminal.
Supervisord is a different kind of tool entirely. It's not PID 1 and it doesn't manage the OS boot process - it's a userspace tool for managing application-level processes: your Python app, a worker process, a background job runner.
The practical split engineers actually use: reach for systemd when managing system services like nginx, since it's already handling the machine's lifecycle and gives you dependency ordering and automatic restarts for free. Reach for supervisord when managing your own application processes or worker processes, partly because it gives you better, more application-focused logging than digging through systemd's journal.
Why interviewers ask this
This question checks whether you understand the Linux process lifecycle well enough to pick the right tool for a given layer of the stack, rather than treating all process managers as interchangeable. It also signals whether you've run real production services, since the systemd-vs-supervisord split only matters once you've had to debug a crash loop or chase logs under pressure.
Follow-ups to expect
- If systemd already restarts failed services automatically, why bother with supervisord for apps? Because supervisord gives you better, more focused logging for individual application processes than systemd's journal, which matters when you're debugging your own app's crashes rather than a system service.
- What's the actual difference between init and systemd under the hood? Init spawns processes sequentially with no awareness of dependencies between them, while systemd manages units as a dependency graph and can start unrelated services in parallel instead of waiting in a strict sequence.
- Would you ever use supervisord for something like nginx instead of systemd? Not typically - nginx is a system service, and systemd is already managing the machine's lifecycle, dependencies, and restarts, so adding supervisord on top is redundant for that layer.
The common wrong answer
Most candidates rattle off textbook definitions - "init starts processes, systemd is newer, supervisord manages processes too" - without ever landing on the actual practical distinction: which one you'd use for system services versus application processes, and why. That vagueness is exactly what separates someone who's read a man page from someone who's actually run these tools in production.
Prefer it spoken? Watch the 30-second answer on YouTube