---
name: "pmdachildren"
section: "3"
platform: "linux"
package: "libpcp-pmda3-dev"
version: "4.3.2+really4.3.1-0.1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/pmdaChildren"
---

# pmdachildren(3)

translate a PMID to a set of dynamic performance metric names

Part of [pmdaChildren(3)](/pmdaChildren/3.md).

## 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 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.

## DIAGNOSTICS

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

## CAVEAT

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

## 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).
