วิธีเรียกใช้คำสั่งเทอร์มินัล Windows, Linux, macOS ใน Java และส่งคืนผลลัพธ์ที่สมบูรณ์

เผยแพร่แล้ว: 2019-02-26

ดำเนินการคำสั่ง Linux mkdir, ls -ltra และ ping ใน Java

การดำเนินการ system command นั้นค่อนข้างง่าย – เมื่อคุณเห็นคำสั่งนี้เสร็จในครั้งแรก

มันเกี่ยวข้องกับการใช้คลาส Java สองคลาส คลาสรันไทม์ และคลาส กระบวนการ โดยทั่วไป คุณจะใช้ exec method ของคลาสรันไทม์เพื่อรันคำสั่งเป็นกระบวนการแยกต่างหาก

การเรียกใช้เมธอด exec จะส่งคืนอ็อบเจ็กต์ Process สำหรับการจัดการโปรเซสย่อย จากนั้น คุณใช้เมธอด getInputStream( getInputStream() และ getErrorStream() ของอ็อบเจ็กต์ Process เพื่ออ่านเอาต์พุตปกติของคำสั่ง และเอาต์พุตข้อผิดพลาดของคำสั่ง สิ่งที่คุณทำกับผลลัพธ์ของคำสั่งที่ดำเนินการนั้นขึ้นอยู่กับคุณและแอปพลิเคชันที่คุณกำลังสร้างทั้งหมด

เมธอด ProcessBuilder.start() และ Runtime.exec สร้างกระบวนการดั้งเดิมและส่งคืนอินสแตนซ์ของคลาสย่อยของ Process ที่สามารถใช้ควบคุมกระบวนการและรับข้อมูลเกี่ยวกับกระบวนการได้

Process ระดับจัดเตรียมวิธีการสำหรับการดำเนินการอินพุตจากกระบวนการ ดำเนินการส่งออกไปยังกระบวนการ รอให้กระบวนการเสร็จสิ้น ตรวจสอบสถานะการออกของกระบวนการ และทำลาย (ฆ่า) กระบวนการ

เมธอดที่สร้างโปรเซสอาจทำงานได้ไม่ดีนักสำหรับโปรเซสพิเศษบนแพลตฟอร์มเนทีฟบางแพลตฟอร์ม เช่น โปรเซสหน้าต่างเนทีฟ โปรเซส daemon โปรเซส Win16/DOS บน Microsoft Windows หรือเชลล์สคริปต์

โดยค่าเริ่มต้น กระบวนการย่อยที่สร้างขึ้นไม่มีเทอร์มินัลหรือคอนโซลของตัวเอง การดำเนินการ I/O มาตรฐานทั้งหมด (เช่น stdin, stdout, stderr) จะถูกเปลี่ยนเส้นทางไปยังกระบวนการหลัก ซึ่งสามารถเข้าถึงได้ผ่านสตรีมที่ได้รับโดยใช้เมธอด getOutputStream() getInputStream( getInputStream() และ getErrorStream()

กระบวนการหลักใช้สตรีมเหล่านี้เพื่อป้อนอินพุตและรับเอาต์พุตจากกระบวนการย่อย เนื่องจากแพลตฟอร์มดั้งเดิมบางแพลตฟอร์มให้ขนาดบัฟเฟอร์ที่จำกัดสำหรับสตรีมอินพุตและเอาต์พุตมาตรฐานเท่านั้น ความล้มเหลวในการเขียนสตรีมอินพุตในทันทีหรืออ่านสตรีมเอาต์พุตของกระบวนการย่อยอาจทำให้กระบวนการย่อยบล็อก หรือแม้แต่การหยุดชะงัก

ด้านล่างนี้คือตัวอย่าง Java ง่ายๆ สองตัวอย่างสำหรับการอ้างอิงของคุณ

ตัวอย่าง-1. ดำเนินการ mkdir, ls -ltra และ ping ใน Java

  • สร้างไฟล์ CrunchifyCommandJava.java
  • ดำเนินการ mkdir /Users/ashah/Desktop/new-folder
  • ดำเนินการ ls -ltra /Library
  • ดำเนินการ ping crunchify.com

ตรวจสอบให้แน่ใจว่าได้เปลี่ยนเส้นทางตามโปรแกรมด้านบนตามการตั้งค่าระบบของคุณ

คอนโซล Eclipse

เพียงเรียกใช้โปรแกรมด้านบนเป็น Java Application แล้วคุณจะเห็นผลลัพธ์ที่คล้ายคลึงกัน

ตัวอย่างที่ 2

  • CrunchifyRunCommand.java
  • ดำเนินการคำสั่ง ps -few เพื่อรับรายการกระบวนการทั้งหมดที่ทำงานอยู่บนระบบของคุณ

คอนโซล Eclipse

นี่คือกระบวนการบางส่วนที่ทำงานบน MacBook Pro ของฉัน มีอีกมากแต่วางน้อยมาก

ฉันหวังว่าบทช่วยสอนนี้จะช่วยให้คุณรันคำสั่งเทอร์มินัล linux, macOS โดยใช้โปรแกรม Java อย่างง่าย แจ้งให้เราทราบสำหรับคำถามใด ๆ