Выполнение system command это относительно просто — как только вы увидели это в первый раз.
Он включает в себя использование двух классов Java, класса Runtime и класса Process. В основном вы используете exec method класса Runtime для запуска команды как отдельного процесса.
Вызов метода exec возвращает объект Process для управления подпроцессом. Затем вы используете getInputStream() а также getErrorStream() методы Process объект для чтения нормального вывода команды и вывода ошибки команды. Что вы делаете с выводом выполненной команды, полностью зависит от вас и создаваемого вами приложения.
ProcessBuilder.start() а также Runtime.exec методы создают собственный процесс и возвращают экземпляр подкласса Process это может быть использовано для управления процессом и получения информации о нем.
Класс Process предоставляет методы для выполнения ввода из процесса, выполнения вывода в процесс, ожидания завершения процесса, проверки состояния выхода из процесса и уничтожения (уничтожения) процесса .
Методы, которые создают процессы, могут не работать для специальных процессов на определенных собственных платформах, таких как собственные процессы управления окнами, процессы- демоны, процессы Win16 / DOS в Microsoft Windows или сценарии оболочки.
По умолчанию созданный подпроцесс не имеет собственного терминала или консоли. Все его стандартные операции ввода-вывода (т.е. stdin, stdout, stderr) будут перенаправлены в родительский процесс, где к ним можно получить доступ через потоки, полученные с помощью методов. getOutputStream() , getInputStream() , а также getErrorStream() ,
Родительский процесс использует эти потоки для подачи входных данных и получения выходных данных из подпроцесса. Поскольку некоторые собственные платформы предоставляют ограниченный размер буфера только для стандартных входных и выходных потоков, невозможность оперативной записи входного потока или чтения выходного потока подпроцесса может привести к блокировке или даже взаимной блокировке подпроцесса.
Ниже приведены два простых примера Java для вашей справки.
Пример-1. Выполните mkdir, ls -ltra и ping в Java
- Создать файл CrunchifyCommandJava.java
- казнить
mkdir /Users/ashah/Desktop/new-folder - казнить
ls -ltra /Library - казнить
ping crunchify.com
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
пакет crunchify. ком . учебные пособия ;
Импортировать Java. Ио. BufferedReader ;
Импортировать Java. Ио. IOException ;
Импортировать Java. Ио. InputStream ;
Импортировать Java. Ио. InputStreamReader ;
/ **
* @author Crunchify.com
* Выполнять команды Linux с использованием Java. В этом уроке мы выполняем mkdir, ls -ltra и ping
* /
общественности учебный класс CrunchifyCommandJava {
общественности printOutput getStreamWrapper ( InputStream есть , строка тип ) {
вернуть новый printOutput ( есть , тип ) ;
}
общественности статический недействительным main ( Строка [ ] аргументы ) {
Runtime RT знак равно Продолжительность. getRuntime ( ) ;
CrunchifyCommandJava rte знак равно новый CrunchifyCommandJava ( ) ;
printOutput errorReported , outputMessage ;
пытаться {
Процесс прок знак равно к.т.. exec ( mkdir / Users / ashah / Desktop / new-folder ) ;
errorReported знак равно RTE. getStreamWrapper ( proc . getErrorStream ( ) , «ОШИБКА» ) ;
outputMessage знак равно RTE. getStreamWrapper ( proc . getInputStream ( ) , «ВЫХОД» ) ;
errorReported. начало ( ) ;
выходное сообщение . начало ( ) ;
} ловить ( IOException е ) {
эл . printStackTrace ( ) ;
}
пытаться {
Процесс прок знак равно к.т.. exec ( ls -ltra / Library ) ;
errorReported знак равно RTE. getStreamWrapper ( proc . getErrorStream ( ) , «ОШИБКА» ) ;
outputMessage знак равно RTE. getStreamWrapper ( proc . getInputStream ( ) , «ВЫХОД» ) ;
errorReported. начало ( ) ;
выходное сообщение . начало ( ) ;
} ловить ( IOException е ) {
эл . printStackTrace ( ) ;
}
пытаться {
Процесс прок знак равно к.т.. exec ( ping crunchify.com ) ;
errorReported знак равно RTE. getStreamWrapper ( proc . getErrorStream ( ) , «ОШИБКА» ) ;
outputMessage знак равно RTE. getStreamWrapper ( proc . getInputStream ( ) , «ВЫХОД» ) ;
errorReported. начало ( ) ;
outputMessage . начало ( ) ;
} ловить ( IOException е ) {
эл . printStackTrace ( ) ;
}
}
частный учебный класс printOutput продолжается Нить {
InputStream is знак равно ноль ;
printOutput ( InputStream есть , строка тип ) {
это. является знак равно есть ;
}
общественности недействительным запустить ( ) {
строка s знак равно ноль ;
пытаться {
BufferedReader br знак равно новый BufferedReader (
новый InputStreamReader ( is ) ) ;
в то время как ( ( с знак равно бр . readLine ( ) ) ! знак равно ноль ) {
Система. вне. println ( s ) ;
}
} ловить ( IOException Ioe ) {
все . printStackTrace ( ) ;
}
}
}
}
|
Обязательно измените путь в указанной выше программе в соответствии с настройками вашей системы.
Выход консоли Eclipse:
Просто запустите вышеуказанную программу как Java-приложение, и вы увидите похожий результат.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
mkdir : / Пользователи / ashah / Рабочий стол / новый — файл — создан . TXT : Файл создан
Всего 0
drwxr — хт — х 3 корневое колесо 96 август 17 2018 Композиции
drwxr — хт — х @ 2 корневое колесо 64 август 17 2018 GPUBundles
drwxr — хт — х 2 корневое колесо 64 август 17 2018 SystemProfiler
drwxr — хт — х 2 корневое колесо 64 август 17 2018 ColorPickers
— RW — R — R — 1 корневое колесо 0 август 17 2018 , локализованный
drwxr — хт — х 2 корневое колесо 64 август 17 2018 StartupItems
drwxr — хт — х 3 корневое колесо 96 август 17 2018 речь
drwxr — хт — х 4 корневое колесо 128 август 17 2018 Рубин
drwxr — хт — х @ 2 корневое колесо 64 август 17 2018 CoreAnalytics
drwxr — хт — х 3 корневое колесо 96 август 17 2018 DirectoryServices
drwxr — хт — х 5 корневое колесо 160 август 17 2018 Веб сервер
drwxr — хт — х 3 корневое колесо 96 август 17 2018 Perl
drwxr — хт — х 2 корневое колесо 64 август 17 2018 ScriptingAdditions
drwxr — хт — х 2 корневое колесо 64 август 17 2018 Клавиатура Раскладка
drwxr — хт — х 3 корневое колесо 96 август 17 2018 Графика
drwxr — хт — х 3 корневое колесо 96 август 17 2018 питон
drwxr — хт — х 8 корневое колесо 256 октябрь 11 16 : 51 Картинки пользователя
drwxr — хт — х 3 корневое колесо 96 октябрь 11 16 : 51 Хранители экрана
drwxr — хт — х 51 корневое колесо 1632 октябрь 11 16 : 51 Картинки рабочего стола
drwxr — хт — х 2 корневое колесо 64 октябрь 18 18 : 51 Элементы контекстного меню
drwxr — хт — х 2 корневое колесо 64 октябрь 18 18 : 51 Компоненты
drwxr — хт — х 5 корневое колесо 160 октябрь 21 16: 03 OpenDirectory
drwxr — хт — х 2 корневое колесо 64 октябрь 23 20 : 43 Методы ввода
drwxr — хт — х 4 корневое колесо 128 октябрь 29 23 : 49 видео
drwxr — хт — х 3 корневое колесо 96 ноябрь 5 21 : 20 Сообщения
drwxr — хт — х @ 3 корневое колесо 96 ноябрь 12 22 : 37 MessageTracer
drwxr — хт — х 3 корневое колесо 96 ноябрь 12 22 : 55 CoreMediaIO
drwxr — хт — х 3 корневое колесо 96 ноябрь 29 23 : 38 песочница
drwxr — хт — х 3 корневое колесо 96 ноябрь 29 23 : 38 Файловые
drwxr — хт — х 8 корневое колесо 256 ноябрь 29 23 : 40 Захват изображения
drwxr — хт — х 4 корневое колесо 128 ноябрь 29 23 : 41 Джава
drwxr — хт — х 4 корневое колесо 128 ноябрь 29 23 : 41 QuickTime
drwxr — хт — х 10 корневое колесо 320 ноябрь 29 23 : 45 Сценарии
drwxrwxr — т 182 root admin 5824 ноябрь 29 23 : 47 шрифты
drwxr — хт — х 4 корневое колесо 128 ноябрь 29 23 : 49 Беглый взгляд
drwxr — хт — х 4 корневое колесо 128 ноябрь 29 23 : 49 Прожектор
drwxr — хт — х 37 корневое колесо 1184 ноябрь 29 23 : 50 Скрипты модема
drwxr — хт — х 4 корневое колесо 128 февраль 11 13: 00 ColorSync
drwxr — хт — х 4 корневое колесо 128 февраль 11 13: 04 Безопасность
drwxr — хт — х 8 корневое колесо 256 февраль 11 13: 04 Сервисы PDF
drwxr — хт — х 3 корневое колесо 96 февраль 11 13 : 05 катакомба
drwxr — хт — х 9 корневое колесо 288 февраль 11 13 : 05 Каркасы
drwxr — хт — х 3 корневое колесо 96 февраль 11 13 : 05 Automator
drwxr — хт — х 10 корневое колесо 320 февраль 11 13 : 05 аудио
drwxr — хт — х 3 корневое колесо 96 февраль 11 13 : 05 Tanium
drwxr — хт — х + 68 корневое колесо 2176 февраль 11 13 : 05 ,
drwxr — хт — х 3 root admin 96 февраль 11 13 : 05 разработчик
drwxr — хт — х 8 корневое колесо 256 февраль 11 13 : 05 Документация
drwxr — хт — х 4 корневое колесо 128 февраль 11 13 : 05 DropboxHelperTools
drwxrwxr — x 14 root admin 448 февраль 11 13 : 07 поступления
drwxr — хт — х 4 корневое колесо 128 февраль 11 13 : 07 SystemMigration
drwxr — хт — х @ 4 корневое колесо 128 февраль 11 13 : 10 StagedExtensions
drwxr — хт — х 14 корневое колесо 448 февраль 11 18 : 26 Виджеты
drwxr — хт — х 13 корневое колесо 416 февраль 11 18 : 26 расширения
drwxr — хт — х 29 корневое колесо 928 февраль 11 18 : 35 , ,
drwxr — хт — х 9 корневое колесо 288 февраль 17 12 : 38 бревна
drwxrwxrwt 11 root admin 352 февраль 22 13 : 29 Тайники
drwxr — хт — х 11 корневое колесо 352 февраль 22 13 : 36 LaunchAgents
drwxr — хт — х 2 корневое колесо 64 февраль 22 13 : 36 PreferencePanes
drwxr — хт — х 9 корневое колесо 288 февраль 22 13 : 36 Интернет Plug — Ins
drwxr — хт — т 7 корневое колесо 224 февраль 22 13 : 36 PrivilegedHelperTools
drwxr — хт — х 18 корневое колесо 576 февраль 22 13 : 36 LaunchDaemons
drwxr — хт — х 25 администратор root 800 февраль 22 16: 03 Поддержка приложений
доктор — хр — хр — х 9 корневое колесо 288 февраль 25 10 : 24 Принтеры
drwxr — хт — х @ 5 корневое колесо 160 февраль 25 10 : 24 Обновления
drwxr — хт — х 10 корневое колесо 320 февраль 25 14 : 12 Брелки
drwxr — хт — х 25 корневое колесо 800 февраль 26 08 : 07 Управляемые настройки
drwxr — хт — х 67 корневое колесо 2144 февраль 26 08 : 07 предпочтения
PING crunchify. ком ( 35.197.114.216 ) : 56 байты данных
64 байты из 35.197.114.216 : icmp_seq = 0 ttl = 54 время = 70.275 Миз
64 байты из 35.197.114.216 : icmp_seq = 1 ttl = 54 время = 73,876 Миз
64 байты из 35.197.114.216 : icmp_seq = 2 ttl = 54 время = 68,134 Миз
64 байты из 35.197.114.216 : icmp_seq = 3 ttl = 54 время = 75,951 Миз
64 байты из 35.197.114.216 : icmp_seq = 4 ttl = 54 время = 70.205 Миз
|
Пример-2.
- CrunchifyRunCommand.java
- Выполнить команду
ps -fewчтобы получить список всех процессов, запущенных в вашей системе.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
пакет crunchify. ком . учебные пособия ;
Импортировать Java. Ио. BufferedReader ;
Импортировать Java. Ио. IOException ;
Импортировать Java. Ио. InputStreamReader ;
/ **
* @author Crunchify.com
* Выполните команду ps -few в Java, чтобы получить список всех процессов
* /
общественности учебный класс CrunchifyRunCommand {
общественности статический недействительным main ( Строка [ ] аргументы ) {
строка s знак равно ноль ;
пытаться {
// Процесс обеспечивает управление собственными процессами, запущенными ProcessBuilder.start и Runtime.exec.
// getRuntime () возвращает объект времени выполнения, связанный с текущим приложением Java.
Процесс п знак равно Продолжительность. getRuntime ( ) . exec ( ps -few ) ;
BufferedReader stdInput знак равно новый BufferedReader ( новый InputStreamReader ( p . GetInputStream ( ) ) ) ;
BufferedReader stdError знак равно новый BufferedReader ( новый InputStreamReader ( p . GetErrorStream ( ) ) ) ;
// читаем вывод из команды
Система. вне. println ( «Вот стандартный вывод команды: / n» ) ;
в то время как ( ( с знак равно stdInput. readLine ( ) ) ! знак равно ноль ) {
Система. вне. println ( s ) ;
}
// читаем любые ошибки из предпринятой команды
Система. вне. println ( «Вот стандартная ошибка команды (если есть): / n» ) ;
в то время как ( ( с знак равно stdError . readLine ( ) ) ! знак равно ноль ) {
Система. вне. println ( s ) ;
}
Система. выход ( 0 ) ;
} ловить ( IOException е ) {
Система. вне. println ( «произошло исключение — вот что я знаю:» ) ;
эл . printStackTrace ( ) ;
Система. выход ( — 1 ) ;
}
}
}
|
Выход консоли Eclipse:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
Вот стандартный вывод команды:
UID PID PPID С STIME TTY TIME CMD
0 1 0 0 Fri09PM ? ? 7 : 14,76 / sbin / launchd
0 44 1 0 Fri09PM ? ? 0 : 09,67 / usr / sbin / syslogd
0 45 1 0 Fri09PM ? ? 0 : 12,95 / usr / libexec / UserEventAgent ( Система )
0 49 1 0 Fri09PM ? ? 0 : 04.41
/ Система / Библиотека / PrivateFrameworks / Удалить . framework / ресурсы / неустановленные 0 50 1 0 Fri09PM ? ? 0 : 26,75 / usr / libexec / kextd
0 51 1 0 Fri09PM ? ? 2 : 00,76 / Система / Библиотека / Каркасы / CoreServices . рамки / Версии / A / Каркасы / FSEvents . framework / Версии / A / Поддержка / fseventsd
0 53 1 0 Fri09PM ? ? 4 : 16.25 / usr / local / jamf / bin / jamf launchDaemon — принудительное ограничение — monitorNetworkStateChanges
0 54 1 0 Fri09PM ? ? 0 : 01.29 / Система / Библиотека / PrivateFrameworks / MediaRemote . Framework / Поддержка / Mediaremoted
55 57 1 0 Fri09PM ? ? 0 : 01.23 / Система / Библиотека / CoreServices / appleeventsd — сервер
0 58 1 0 Fri09PM ? ? 4 : 21,14 / usr / sbin / systemstats — демон
0 60 1 0 Fri09PM ? ? 0 : 41,10 / usr / libexec / configd
0 61 1 0 Fri09PM ? ? 1 : 03,98 / Система / Библиотека / CoreServices / powerd . связка / питание
0 62 1 0 Fri09PM ? ? 0 : 00,89 / Библиотека / Поддержка приложений / JAMF / Jamf . Приложение / Содержание / MacOS / JamfDaemon . app / Содержание / MacOS / JamfDaemon
0 65 1 0 Fri09PM ? ? 0 : 43,84 / USR / libexec / logd
0 66 1 0 Fri09PM ? ? 0 : 00.02 / usr / libexec / keybagd — т 15
0 73 1 0 Fri09PM ? ? 3 : 26,45 / Система / Библиотека / Каркасы / CoreServices . рамки / Каркасы / Метаданные . Framework / Поддержка / MDS
240 74 1 0 Fri09PM ? ? 0 : 00.11 / Система / Библиотека / CoreServices / iconservicesd
0 75 1 0 Fri09PM ? ? 0 : 03,39 / usr / libexec / diskarbitrationd
0 79 1 0 Fri09PM ? ? 0 : 00,73 / Система / Библиотека / CoreServices / backupd . bundle / Содержание / Ресурсы / backupd — помощник — запущен
0 80 1 0 Fri09PM ? ? 0 : 03,84 / usr / libexec / coreduetd
0 84 1 0 Fri09PM ? ? 2 : 30,59 / usr / libexec / opendirectoryd
0 85 1 0 Fri09PM ? ? 0 : 17,45 / Система / Библиотека / PrivateFrameworks / ApplePushService . Framework / APSD
0 86 1 0 Fri09PM ? ? 0 : 00,67 / Система / Библиотека / PrivateFrameworks / Доска объявлений . framework / Версии / A / Ресурсы / nbstated
0 87 1 0 Fri09PM ? ? 0 : 16,91 / Система / Библиотека / CoreServices / launchservicesd
266 88 1 0 Fri09PM ? ? 0 : 06,48 / usr / libexec / timed
0 89 1 0 Fri09PM ? ? 0 : 25,37 / usr / sbin / securityd — я
213 90 1 0 Fri09PM ? ? 0 : 01.16 / Система / Библиотека / PrivateFrameworks / MobileDevice . framework / Версии / A / Ресурсы / usbmuxd — запущен
205 92 1 0 Fri09PM ? ? 0 : 59,64 / usr / libexec / locationd
0 94 1 0 Fri09PM ? ? 0: 00,08 autofsd
244 95 1 0 Fri09PM ? ? 0 : 03.06 / usr / libexec / displaypolicyd — к 1
0 98 1 0 Fri09PM ? ? 0 : 11,56 / usr / libexec / dasd
0 99 1 0 Fri09PM ? ? 0 : 00,71 / Система / Библиотека / PrivateFrameworks / Heimdal . рамки / помощники / KDC
0 103 1 0 Fri09PM ? ? 0 : 00,87 / Библиотека / Tanium / TaniumClient / TaniumClient — г
110048994 104 1 0 Fri09PM ? ? 0 : 34,02 / Система / Библиотека / CoreServices / loginwindow . приложение / Содержание / MacOS / консоль loginwindow
0 105 1 0 Fri09PM ? ? 0 : 00,76 / Система / Библиотека / CoreServices / logind
0 106 1 0 Fri09PM ? ? 0 : 00,66 / Система / Библиотека / PrivateFrameworks / GenerationalStorage . framework / Версии / A / Поддержка / revisiond
0 107 1 0 Fri09PM ? ? 0 : 00.03 / usr / sbin / KernelEventAgent
0 109 1 0 Fri09PM ? ? 1 : 58,55 / usr / sbin / bluetoothd
261 110 1 0 Fri09PM ? ? 13 : 48,55 / usr / libexec / hidd
0 112 1 0 Fri09PM ? ? 0 : 06,37 / usr / libexec / corebrightnessd — запущен
0 113 1 0 Fri09PM ? ? 0 : 04.23 / usr / libexec / AirPlayXPCHelper
0 114 1 0 Fri09PM ? ? 1 : 07.01 / usr / sbin / notifyd
241 116 1 0 Fri09PM ? ? 0 : 11,70 / usr / sbin / distnoted daemon
0 119 1 0 Fri09PM ? ? 0 : 03.99 / usr / libexec / amfid
0 123 1 0 Fri09PM ? ? 0 : 09,47 / usr / libexec / syspolicyd
0 124 1 0 Fri09PM ? ? 0 : 05,81 / Система / Библиотека / Каркасы / Безопасность . рамки / Версия / A / XPCServices / authd. xpc / Содержание / MacOS / authd
0 142 1 0 Fri09PM ? ? 1 : 31,63 / usr / sbin / cfprefsd daemon
0 143 1 0 Fri09PM ? ? 0 : 23,54 / Система / Библиотека / CoreServices / coreservicesd
0 166 1 0 Fri09PM ? ? 0 : 21,34 / Система / Библиотека / PrivateFrameworks / CoreDuetContext . framework / Ресурсы / contextstored
|
Вот некоторые из процессов, запущенных на моем MacBook Pro . Их довольно много, но наклеено очень мало.
Я надеюсь, что это руководство поможет вам выполнить любые команды терминала linux, macOS с помощью простой Java-программы. Дайте мне знать по любым вопросам.
0.00 (0%) 0 votes








