atexit - Linux


Overview

atexit registers a function that will be called when the program exits or terminates. It allows users to perform cleanup tasks, release resources, or execute specific actions before the program ends.

Syntax

atexit(void (*func)(void));

Options/Flags

N/A

Examples

Example 1: Simple exit function

#include <stdlib.h>

void cleanup() {
  printf("Cleaning up...\n");
}

int main() {
  atexit(cleanup);
  exit(0);
}

Example 2: Multiple exit functions

#include <stdlib.h>

void cleanup1() {
  printf("Cleanup 1\n");
}

void cleanup2() {
  printf("Cleanup 2\n");
}

int main() {
  atexit(cleanup1);
  atexit(cleanup2);
  exit(0);
}

Common Issues

  • Forgetting to register the exit function: Ensure the atexit call is made before the program exits to avoid unexpected behavior.
  • Memory leaks: In some cases, exit functions may not be called if the program terminates abnormally (e.g., a segmentation fault). This can lead to memory leaks.

Integration

  • With signal: To handle specific signals (e.g., SIGINT, SIGTERM), combine atexit with signal to perform actions upon receiving those signals.
  • In scripts: atexit can be used in shell scripts to perform cleanup tasks before the script exits, regardless of the exit status.

Related Commands

  • exit: Terminates the program.
  • on_exit: Another function in the C library that can be used to register exit handlers.