def ps(udid):
        """
        Retrieves the process list of the specified device.

        Parameters:
            udid (str): The unique device identifier.

        Returns:
            list: A list of dictionaries containing information about each process. Each dictionary contains the following keys:
                - pid (int): The process ID.
                - name (str): The name of the process.
                - bundle_id (str): The bundle identifier of the process.
                - display_name (str): The display name of the process.
            e.g. [{'pid': 1, 'name': 'MobileSafari', 'bundle_id': 'com.apple.mobilesafari', 'display_name': 'Safari'}, ...]

        """
        with BaseDevice(udid, Usbmux()).connect_instruments() as ts:
            app_infos = list(BaseDevice(udid, Usbmux()).installation.iter_installed(app_type=None))
            ps = list(ts.app_process_list(app_infos))
        ps_list = []
        keys = ['pid', 'name', 'bundle_id', 'display_name']
        for p in ps:
            if not p['isApplication']:
                continue
            ps_list.append({key: p[key] for key in keys})
        return ps_list

        Retrieves the process list of the specified device.

        Parameters:
            udid (str): The unique device identifier.

        Returns:
            list: A list of dictionaries containing information about each process. Each dictionary contains the following keys:
                - pid (int): The process ID.
                - name (str): The name of the process.
                - bundle_id (str): The bundle identifier of the process.
                - display_name (str): The display name of the process.
            e.g. [{'pid': 1, 'name': 'MobileSafari', 'bundle_id': 'com.apple.mobilesafari', 'display_name': 'Safari'}, ...]

        
airtest/core/ios/ios.py