比如 sysprop | grep java ,只统计到 sysprop
sysprop | grep java
sysprop
idfiyjo81#
您好,我测试了下,管道是起作用的,请看看:
wgmfuz8q2#
@Roger3581321 管道是工作的,这里指的是 回报服务里,没有统计到管道后面的命令
x3naxklr3#
好的,我再调查一下。
whitzsjs4#
首先排除了api接收错误的问题
那么应该是获取 command 的问题.果然...
command
因为命令 是 process (com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessImpl) , process 和 管道符是分开处理的JobControllerImpl.java
arthas/core/src/main/java/com/taobao/arthas/core/shell/system/impl/JobControllerImpl.java
Lines 186 to 190 in 7332033
| | if (isPipeline) { || | pipelineTokens.add(remainingToken); || | } else { || | remaining.add(remainingToken); || | } |
process args 携带的值, 例如[arthas@pid]$ jad --source-only com.example.demo.HelloController那么
[arthas@pid]$ jad --source-only com.example.demo.HelloController
name() : jad
name()
jad
process.args(): [ "--source-only", "com.example.demo.HelloController"]
process.args()
[ "--source-only", "com.example.demo.HelloController"]
process.commandLine().allArguments();
process.argsTokens();
似乎都满足不了需求
我觉得可行的方法有
history
term
((TermImpl) term).getReadline().getHistory()
@hengyunabc 你觉得呢
flvtvl505#
@Huangxuny1 不能依赖term的数据,马上要合并http api分支了。我印象中有一个通过CliToken还原命令的方法,请跟踪一下 :com.taobao.arthas.core.shell.system.Job#line()com.taobao.arthas.core.shell.system.impl.JobControllerImpl#createJob()
s8vozzvw6#
这个我昨晚也注意到了 的确能够从 Job 中拿到 line 但是从调试器来看process -> this.$0 (ProcessImpl) -> terminateHandler -> this.$0( JobImpl) 才能拿到 line有不有其他简单方法拿到我还需要抽时间看看源码
Job
line
process
this.$0
terminateHandler
4uqofj5v7#
要按照正常的方式去获取依赖的对象,不能用外部工程的方式。可以在com.taobao.arthas.core.shell.system.impl.JobImpl#JobImpl() 构造方法中向process传入job对象引用。
JobImpl(int id, final JobControllerImpl controller, Process process, String line, boolean runInBackground, ShellImpl shell) { // .... process.setJob(this); process.terminatedHandler(new TerminatedHandler(controller)); }
7条答案
按热度按时间idfiyjo81#
您好,我测试了下,管道是起作用的,请看看:
wgmfuz8q2#
@Roger3581321 管道是工作的,这里指的是 回报服务里,没有统计到管道后面的命令
x3naxklr3#
好的,我再调查一下。
whitzsjs4#
首先排除了api接收错误的问题
那么应该是获取
command
的问题.果然...
因为命令 是 process (com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessImpl) , process 和 管道符是分开处理的
JobControllerImpl.java
arthas/core/src/main/java/com/taobao/arthas/core/shell/system/impl/JobControllerImpl.java
Lines 186 to 190 in 7332033
| | if (isPipeline) { |
| | pipelineTokens.add(remainingToken); |
| | } else { |
| | remaining.add(remainingToken); |
| | } |
process args 携带的值, 例如
[arthas@pid]$ jad --source-only com.example.demo.HelloController
那么
name()
:jad
process.args()
:[ "--source-only", "com.example.demo.HelloController"]
process.commandLine().allArguments();
process.argsTokens();
似乎都满足不了需求
我觉得可行的方法有
history
文件里直接拿 里拿数据 , 直接拿第一条就行了 但是多人同时操作的时候可能会有问题term
里拿((TermImpl) term).getReadline().getHistory()
, 其实这个也是从history
想到的...@hengyunabc 你觉得呢
flvtvl505#
@Huangxuny1 不能依赖term的数据,马上要合并http api分支了。我印象中有一个通过CliToken还原命令的方法,请跟踪一下 :
com.taobao.arthas.core.shell.system.Job#line()
com.taobao.arthas.core.shell.system.impl.JobControllerImpl#createJob()
s8vozzvw6#
这个我昨晚也注意到了 的确能够从
Job
中拿到line
但是从调试器来看process
->this.$0
(ProcessImpl) ->terminateHandler
->this.$0
( JobImpl) 才能拿到line
有不有其他简单方法拿到我还需要抽时间看看源码
4uqofj5v7#
要按照正常的方式去获取依赖的对象,不能用外部工程的方式。
可以在com.taobao.arthas.core.shell.system.impl.JobImpl#JobImpl() 构造方法中向process传入job对象引用。