Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
JDK 17 jdk.attach.jmod - Attach Module
JDK 17 jdk.attach.jmod is the JMOD file for JDK 17 Attach module.
JDK 17 Attach module compiled class files are stored in \fyicenter\jdk-17.0.5\jmods\jdk.attach.jmod.
JDK 17 Attach module compiled class files are also linked and stored in the \fyicenter\jdk-17.0.5\lib\modules JImage file.
JDK 17 Attach module source code files are stored in \fyicenter\jdk-17.0.5\lib\src.zip\jdk.attach.
You can click and view the content of each source code file in the list below.
✍: FYIcenter
⏎ sun/tools/attach/VirtualMachineImpl.java
/* * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package sun.tools.attach; import com.sun.tools.attach.AttachOperationFailedException; import com.sun.tools.attach.AgentLoadException; import com.sun.tools.attach.AttachNotSupportedException; import com.sun.tools.attach.spi.AttachProvider; import java.io.InputStream; import java.io.IOException; import java.io.File; /* * Bsd implementation of HotSpotVirtualMachine */ public class VirtualMachineImpl extends HotSpotVirtualMachine { // "tmpdir" is used as a global well-known location for the files // .java_pid<pid>. and .attach_pid<pid>. It is important that this // location is the same for all processes, otherwise the tools // will not be able to find all Hotspot processes. // This is intentionally not the same as java.io.tmpdir, since // the latter can be changed by the user. // Any changes to this needs to be synchronized with HotSpot. private static final String tmpdir; String socket_path; /** * Attaches to the target VM */ VirtualMachineImpl(AttachProvider provider, String vmid) throws AttachNotSupportedException, IOException { super(provider, vmid); // This provider only understands pids int pid; try { pid = Integer.parseInt(vmid); if (pid < 1) { throw new NumberFormatException(); } } catch (NumberFormatException x) { throw new AttachNotSupportedException("Invalid process identifier: " + vmid); } // Find the socket file. If not found then we attempt to start the // attach mechanism in the target VM by sending it a QUIT signal. // Then we attempt to find the socket file again. File socket_file = new File(tmpdir, ".java_pid" + pid); socket_path = socket_file.getPath(); if (!socket_file.exists()) { File f = createAttachFile(pid); try { sendQuitTo(pid); // give the target VM time to start the attach mechanism final int delay_step = 100; final long timeout = attachTimeout(); long time_spend = 0; long delay = 0; do { // Increase timeout on each attempt to reduce polling delay += delay_step; try { Thread.sleep(delay); } catch (InterruptedException x) { } time_spend += delay; if (time_spend > timeout/2 && !socket_file.exists()) { // Send QUIT again to give target VM the last chance to react sendQuitTo(pid); } } while (time_spend <= timeout && !socket_file.exists()); if (!socket_file.exists()) { throw new AttachNotSupportedException( String.format("Unable to open socket file %s: " + "target process %d doesn't respond within %dms " + "or HotSpot VM not loaded", socket_path, pid, time_spend)); } } finally { f.delete(); } } // Check that the file owner/permission to avoid attaching to // bogus process checkPermissions(socket_path); // Check that we can connect to the process // - this ensures we throw the permission denied error now rather than // later when we attempt to enqueue a command. int s = socket(); try { connect(s, socket_path); } finally { close(s); } } /** * Detach from the target VM */ public void detach() throws IOException { synchronized (this) { if (socket_path != null) { socket_path = null; } } } // protocol version private final static String PROTOCOL_VERSION = "1"; // known errors private final static int ATTACH_ERROR_BADVERSION = 101; /** * Execute the given command in the target VM. */ InputStream execute(String cmd, Object ... args) throws AgentLoadException, IOException { assert args.length <= 3; // includes null // did we detach? synchronized (this) { if (socket_path == null) { throw new IOException("Detached from target VM"); } } // create UNIX socket int s = socket(); // connect to target VM try { connect(s, socket_path); } catch (IOException x) { close(s); throw x; } IOException ioe = null; // connected - write request // <ver> <cmd> <args...> try { writeString(s, PROTOCOL_VERSION); writeString(s, cmd); for (int i = 0; i < 3; i++) { if (i < args.length && args[i] != null) { writeString(s, (String)args[i]); } else { writeString(s, ""); } } } catch (IOException x) { ioe = x; } // Create an input stream to read reply SocketInputStream sis = new SocketInputStream(s); // Read the command completion status int completionStatus; try { completionStatus = readInt(sis); } catch (IOException x) { sis.close(); if (ioe != null) { throw ioe; } else { throw x; } } if (completionStatus != 0) { // read from the stream and use that as the error message String message = readErrorMessage(sis); sis.close(); // In the event of a protocol mismatch then the target VM // returns a known error so that we can throw a reasonable // error. if (completionStatus == ATTACH_ERROR_BADVERSION) { throw new IOException("Protocol mismatch with target VM"); } // Special-case the "load" command so that the right exception is // thrown. if (cmd.equals("load")) { String msg = "Failed to load agent library"; if (!message.isEmpty()) msg += ": " + message; throw new AgentLoadException(msg); } else { if (message.isEmpty()) message = "Command failed in target VM"; throw new AttachOperationFailedException(message); } } // Return the input stream so that the command output can be read return sis; } /* * InputStream for the socket connection to get target VM */ private class SocketInputStream extends InputStream { int s; public SocketInputStream(int s) { this.s = s; } public synchronized int read() throws IOException { byte b[] = new byte[1]; int n = this.read(b, 0, 1); if (n == 1) { return b[0] & 0xff; } else { return -1; } } public synchronized int read(byte[] bs, int off, int len) throws IOException { if ((off < 0) || (off > bs.length) || (len < 0) || ((off + len) > bs.length) || ((off + len) < 0)) { throw new IndexOutOfBoundsException(); } else if (len == 0) { return 0; } return VirtualMachineImpl.read(s, bs, off, len); } public synchronized void close() throws IOException { if (s != -1) { int toClose = s; s = -1; VirtualMachineImpl.close(toClose); } } } /* * Write/sends the given to the target VM. String is transmitted in * UTF-8 encoding. */ private void writeString(int fd, String s) throws IOException { if (s.length() > 0) { byte b[]; try { b = s.getBytes("UTF-8"); } catch (java.io.UnsupportedEncodingException x) { throw new InternalError(x); } VirtualMachineImpl.write(fd, b, 0, b.length); } byte b[] = new byte[1]; b[0] = 0; write(fd, b, 0, 1); } private File createAttachFile(int pid) throws IOException { File f = new File(tmpdir, ".attach_pid" + pid); createAttachFile0(f.getPath()); return f; } //-- native methods static native void sendQuitTo(int pid) throws IOException; static native void checkPermissions(String path) throws IOException; static native int socket() throws IOException; static native void connect(int fd, String path) throws IOException; static native void close(int fd) throws IOException; static native int read(int fd, byte buf[], int off, int bufLen) throws IOException; static native void write(int fd, byte buf[], int off, int bufLen) throws IOException; static native void createAttachFile0(String path); static native String getTempDir(); static { System.loadLibrary("attach"); tmpdir = getTempDir(); } }
⏎ sun/tools/attach/VirtualMachineImpl.java
Or download all of them as a single archive file:
File name: jdk.attach-17.0.5-src.zip File size: 28319 bytes Release date: 2022-09-13 Download
⇒ JDK 17 jdk.charsets.jmod - Charsets Module
2023-07-01, 1229👍, 0💬
Popular Posts:
JDK 6 tools.jar is the JAR file for JDK 6 tools. It contains Java classes to support different JDK t...
JDK 11 jdk.localedata.jmod is the JMOD file for JDK 11 Localedata module. JDK 11 Locale Data module ...
What Is jsse.jar (JDK 6) Java Secure Socket Extension? jsse.jar, Java Secure Socket Extension, is Ja...
How to download and install JDK (Java Development Kit) 6? If you want to write Java applications, yo...
MXP1 is a stable XmlPull parsing engine that is based on ideas from XPP and in particular XPP2 but c...