---
name: "kexit"
section: "2"
platform: "linux"
package: "lam2-dev"
version: "6.3.2-3"
release: "Debian 2.2 (Potato)"
platforms: ["linux"]
url: "https://new.carta.tech/kexit"
---

# kexit(2)

Terminate LAM process.

## NAME

kexit, \_kexit, atkexit - Terminate LAM process.

## C SYNOPSIS

int kexit (int errcode);\
 int \_kexit (int errcode);\
 int atkexit (int (\*func)(), char \*arg);

## FORTRAN SYNOPSIS

subroutine KXIT (errcode)\
 integer errcode

## DESCRIPTION

A LAM process that calls [kenter(2)](/kenter/2.md) must call *kexit()* to terminate. *kexit()* calls all registered LAM exit functions before informing the local daemon of its death.

*\_kexit()* may be used instead of *kexit()* to avoid calling the exit functions.

The argument to *kexit()* and *\_kexit()* is an exit code which is sent in a message to the parent process, if requested by the parent process when the process was created. See [rploadgo(2)](/rploadgo/2.md) and [rpwait(2)](/rpwait/2.md). By convention the exit code is 0 if the process successfully completed.

An exit function is registered by calling *atkexit()*. The arguments passed to *atkexit()* are the address of the exit function to be called upon *kexit()*, and an argument to pass to the exit function when it is called. (Note that the function may ignore the argument, reverting to the ANSI standard C library [atexit(3)](/atexit/3.md) behavior, where no argument is passable.) There is a limit on how many exit functions may be registered. Exit functions are called in reverse order of their registration. Some system modules register their own cleanup functions.

*kexit()* eventually calls [kdetach(2)](/kdetach/2.md) to gracefully detach from the LAM daemon and [exit(3)](/exit/3.md) to actually terminate within the host operating system.

## RETURN VALUE

*kexit()* and *\_kexit()* do not return. Upon successful completion, *atkexit()* returns 0. Otherwise, -1 is returned and the global variable *errno* is set to indicate the error.

## ERRORS

- ENOEXDESCRIPTORS

  There is no room left in the internal table of exit functions.

## BUGS

If too many user functions are registered with *atkexit()* before calling system functions that also call *atkexit()*, the latter calls to *atkexit()* may fail and some system functions may not be registered. If the missing exit function is for LAM stream file I/O, some output data may be lost.

## SEE ALSO

[kdetach(2)](/kdetach/2.md), [kenter(2)](/kenter/2.md)
