diff --git a/desktop/app/src/server/devices/ios/iOSContainerUtility.tsx b/desktop/app/src/server/devices/ios/iOSContainerUtility.tsx index 3839a90a6..6f5f43fd7 100644 --- a/desktop/app/src/server/devices/ios/iOSContainerUtility.tsx +++ b/desktop/app/src/server/devices/ios/iOSContainerUtility.tsx @@ -10,7 +10,6 @@ import React from 'react'; import {Mutex} from 'async-mutex'; import {exec as unsafeExec, Output} from 'promisify-child-process'; -import {killOrphanedInstrumentsProcesses} from '../../utils/processCleanup'; import {reportPlatformFailures} from '../../../utils/metrics'; import {promises, constants} from 'fs'; import memoize from 'lodash.memoize'; @@ -162,14 +161,14 @@ async function targets( // Not all users have idb installed because you can still use // Flipper with Simulators without it. - // But idb is MUCH more CPU efficient than instruments, so - // when installed, use it. + // But idb is MUCH more CPU efficient than xcrun, so + // when installed, use it. This still holds true + // with the move from instruments to xcrun. // TODO: Move idb availability check up. if (await memoize(isAvailable)(idbPath)) { return await idbListTargets(idbPath); } else { - await killOrphanedInstrumentsProcesses(); - return safeExec('instruments -s devices') + return safeExec('xcrun xctrace list devices') .then(({stdout}) => stdout! .toString() @@ -184,7 +183,7 @@ async function targets( }), ) .catch((e) => { - console.warn('Failed to query instruments:', e); + console.warn('Failed to query for devices using xctrace:', e); return []; }); } diff --git a/desktop/app/src/server/utils/processCleanup.tsx b/desktop/app/src/server/utils/processCleanup.tsx deleted file mode 100644 index 75bb33032..000000000 --- a/desktop/app/src/server/utils/processCleanup.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -import {exec} from 'promisify-child-process'; -import {notNull} from '../utils/typeUtils'; -import {kill} from 'process'; - -// Kills any orphaned Instruments processes belonging to the user. -// -// In some cases, we've seen interactions between Instruments and the iOS -// simulator that cause hung instruments and DTServiceHub processes. If -// enough instances pile up, the host machine eventually becomes -// unresponsive. Until the underlying issue is resolved, manually kill any -// orphaned instances (where the parent process has died and PPID is 1) -// before launching another instruments run. -export async function killOrphanedInstrumentsProcesses() { - const result = await exec('ps -e -o user,ppid,pid,comm'); - result.stdout - ?.toString() - .split('\n') - .filter(notNull) - .map((a) => /^(\S+)\s+1\s+(\d+)\s+(.+)$/.exec(a)) - .filter(notNull) - .filter((m) => m[1] === process.env.USER) - .filter( - (m) => - m[3] && - ['/instruments', '/DTServiceHub'].some((name) => m[3].endsWith(name)), - ) - .forEach((m) => { - const pid = m[2]; - console.debug(`Killing orphaned Instruments process: ${pid}`); - kill(parseInt(pid, 10), 'SIGKILL'); - }); -}