## gskfork

gskfork — Functions to call to clean up after forking.

## Synopsis

    int                 (*GskForkFunc)                      (gpointer data);
    gint                gsk_fork                            (GskForkFunc action,
                                                             gpointer data,
                                                             GError **error);
    void                gsk_fork_add_cleanup_fd             (int fd);
    void                gsk_fork_remove_cleanup_fd          (int fd);
    void                gsk_fork_child_cleanup              (void);

## Description

This provides a way to register file descriptors that should be closed by the background thread. It also contains a gsk-like wrapper to fork.. that is, a callback oriented fork interface.

## Details

### GskForkFunc ()

    int                 (*GskForkFunc)                      (gpointer data);

Function to call from the background process.

`data` : | data passed through `gsk_fork()`.
Returns : | the exit status of this process.

### gsk_fork ()

    gint                gsk_fork                            (GskForkFunc action,
                                                             gpointer data,
                                                             GError **error);

Fork a new thread, cleaning up loose file-descriptors, then running the background function, and exiting with the return value of the background function.

`action` : | function to call from the background process.
`data` : | user-data to pass to `action`.
`error` : | optional place to errors to be put.
Returns : | the process-id of the background thread, or -1 on error.

### gsk_fork_add_cleanup_fd ()

    void                gsk_fork_add_cleanup_fd             (int fd);

Add a file-descriptor to the list that should be closed when `fork()` is run.

A file-descriptor must only be added once.

`fd` : | a file descriptor that should be closed from a background thread.

### gsk_fork_remove_cleanup_fd ()

    void                gsk_fork_remove_cleanup_fd          (int fd);

Remove a file-descriptor from the list that should be closed when `fork()` is run.

`fd` : | remove a file descriptor that was previously registered to be closed on fork with `gsk_fork_add_cleanup_fd()`.

### gsk_fork_child_cleanup ()

    void                gsk_fork_child_cleanup              (void);

Do all cleanup that should follow a fork(2) system call from the child process.