---
name: "pmdaChildren"
section: "3"
platform: "linux"
package: "pcp"
version: "7.2.2-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/pmdaChildren"
---

# pmdaChildren(3)

translate a PMID to a set of dynamic performance metric names

## NAME

**pmdaChildren** - translate a PMID to a set of dynamic performance metric names

## C SYNOPSIS

**#include \<pcp/pmapi.h\>**\
 **#include \<pcp/pmda.h\>**

**int pmdaChildren(char \****name***,** **int** *traverse***,** **char \*\*\****offspring***,** **int \*\****status***,** **pmdaExt \****pmda***);**

**cc ... -lpcp\_pmda -lpcp**

## DESCRIPTION

As part of the Performance Metrics Domain Agent (PMDA) API (see [**PMDA**(3)](/PMDA/3.md)), **pmdaChildren** is the generic callback for returning dynamic metric names (and their status) that are descendants of *name*.

Because implementing dynamic performance metrics requires specific PMDA support, and the facility is an optional component of a PMDA (most PMDAs do **not** support dynamic performance metrics), **pmdaChildren** is a skeleton implementation that returns **PM\_ERR\_NAME**.

A PMDA that supports dynamic performance metrics will provide a private callback that replaces **pmdaChildren** (by assignment to *version.four.children* of the *pmdaInterface* structure) and takes the initial metric *name* and returns names via *offspring*\[\] and the leaf or non-leaf status of each via *status*\[\].

If *traverse* is 0, then the behaviour is akin to [**pmGetChildren**(3)](/pmGetChildren/3.md) and *offspring*\[\] contains the relative name component for the immediate descendants of *name.*

If *traverse* is 1, then the behaviour is akin to [**pmTraversePMNS**(3)](/pmTraversePMNS/3.md) and *offspring*\[\] contains the absolute names of all dynamic metrics that are decedents of *name*.

The resulting list of pointers *offspring* **and** the string values (the names) that the pointers reference will have been allocated by **pmdaChildren** with a single call to [**malloc**(3)](/malloc/3.md), and the caller of **pmdaChildren** will call **free**( *offspring*) to release the space when it is no longer required. The same holds true for the *status* array, namely the caller of **pmdaChildren** will call **free**( *status*) to release the space when it is no longer required.

## CAVEAT

The PMDA must be using **PMDA\_INTERFACE\_4** or later, as specified in the call to [**pmdaDSO**(3)](/pmdaDSO/3.md) or [**pmdaDaemon**(3)](/pmdaDaemon/3.md).

## DIAGNOSTICS

**pmdaChildren** returns **PM\_ERR\_NAME** if the name is not recognized or cannot be translated, otherwise the number of descendent metric names found.

## SEE ALSO

[**PMAPI**(3)](/PMAPI/3.md), [**PMDA**(3)](/PMDA/3.md), [**pmdaDaemon**(3)](/pmdaDaemon/3.md), [**pmdaDSO**(3)](/pmdaDSO/3.md), [**pmdaMain**(3)](/pmdaMain/3.md), [**pmGetChildren**(3)](/pmGetChildren/3.md) and [**pmTraversePMNS**(3)](/pmTraversePMNS/3.md).
