小编rou*_*ble的帖子

bash:默默杀死后台功能进程

贝壳大师,

我有一个bash shell脚本,我在其中启动一个后台函数,比如说foo(),显示一个无聊和长命令的进度条:

foo()
{
    while [ 1 ]
    do
        #massively cool progress bar display code
        sleep 1
    done
}

foo &
foo_pid=$!

boring_and_long_command
kill $foo_pid >/dev/null 2>&1
sleep 10
Run Code Online (Sandbox Code Playgroud)

现在,当foo我去世时,我看到以下文字:

/home/user/script: line XXX: 30290 Killed                  foo
Run Code Online (Sandbox Code Playgroud)

这完全摧毁了我的,非常酷的进度条显示的令人敬畏.

我如何摆脱这条消息?

unix linux bash shell scripting

55
推荐指数
5
解决办法
3万
查看次数

为什么JAXB需要一个no arg构造函数来进行编组?

如果您尝试编组一个引用没有no-arg构造函数的复杂类型的类,例如:

import java.sql.Date;

@XmlRootElement(name = "Foo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
    int i;
    Date d; //java.sql.Date does not have a no-arg constructor
}
Run Code Online (Sandbox Code Playgroud)

使用JAXB实现作为Java的一部分,如下所示:

    Foo foo = new Foo();
    JAXBContext jc = JAXBContext.newInstance(Foo.class);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Marshaller marshaller = jc.createMarshaller();
    marshaller.marshal(foo, baos);
Run Code Online (Sandbox Code Playgroud)

JAXB将抛出一个

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions java.sql.Date does not have a no-arg default constructor
Run Code Online (Sandbox Code Playgroud)

现在,我理解为什么JAXB在解组时需要一个无参数的构造函数 - 因为它需要实例化对象.但是为什么JAXB在编组时需要一个无参数的构造函数?

另外,为什么Java的JAXB实现如果该字段为空则抛出异常,并且无论如何都不会被编组?

我在Java的JAXB实现中遗漏了一些东西,或者这些只是糟糕的实现选择?

java xml jaxb marshalling

45
推荐指数
2
解决办法
5万
查看次数

运行java -jar时包含外部jar

从我的读数来看,执行命令时如下:

java -jar foo.jar
Run Code Online (Sandbox Code Playgroud)

然后忽略主类路径,并从清单文件中获取类路径.

此外,还会忽略在命令行上声明的类路径.所以在:

java -classpath /usr/local/jar/foobar.jar -jar foo.jar
Run Code Online (Sandbox Code Playgroud)

/usr/local/jar/foobar.jar被忽略.

最后,我已经读过清单文件只能在jar文件中包含相对路径.

那么,如何包含系统中存在的外部jar的绝对路径,而不是正在执行的jar文件中?

java jar manifest.mf classpath

38
推荐指数
2
解决办法
9万
查看次数

bash:将stdout和stderr重定向(并追加)到文件和终端,并获得正确的退出状态

要将stdout和stderr重定向(并附加)到文件中,同时还在终端上显示它,我这样做:

command 2>&1 | tee -a file.txt
Run Code Online (Sandbox Code Playgroud)

但是,有没有其他方法可以做到这一点,以便我获得退出状态的准确值?

也就是说,如果我测试$?,我想看到退出状态command,而不是退出状态tee.

我知道我可以${PIPESTATUS[0]}在这里使用而不是$?,但我正在寻找另一种不需要检查的解决方案PIPESTATUS.

bash stdout stderr tee

35
推荐指数
2
解决办法
2万
查看次数

java BlockingQueue没有阻塞偷看?

我有一个阻塞队列的对象.

我想写一个阻塞的线程,直到队列中有一个对象.与BlockingQueue.take()提供的功能类似.

但是,由于我不知道我是否能够成功处理对象,我想只是peek()而不是删除对象.我想删除该对象只有我能够成功处理它.

所以,我想要一个阻塞的peek()函数.目前,peek()只是在队列为空时根据javadoc返回.

我错过了什么吗?还有其他方法可以实现此功能吗?

编辑:

如果我只是使用了一个线程安全队列并且偷看和睡觉了?

public void run() {
    while (!exit) {
        while (queue.size() != 0) {
            Object o =  queue.peek();
            if (o != null) {
                if (consume(o) == true) {
                    queue.remove();
                } else {
                    Thread.sleep(10000); //need to backoff (60s) and try again
                }
            }
        }
        Thread.sleep(1000); //wait 1s for object on queue
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我只有一个消费者线程和一个(单独的)生产者线程.我想这不如使用BlockingQueue有效......任何评论都赞赏.

java queue peek blockingqueue

31
推荐指数
2
解决办法
1万
查看次数

为什么null不等于null false

我正在读这篇文章: 在SQL中获取null == null

并且一致认为,当尝试测试两个(可为空)sql列之间的相等性时,正确的方法是:

where ((A=B) OR (A IS NULL AND B IS NULL))
Run Code Online (Sandbox Code Playgroud)

当A和B为NULL时,(A = B)仍然返回FALSE,因为NULL不等于NULL.这就是需要额外检查的原因.

在测试不平等时呢?根据上面的讨论,它让我认为,为了测试不平等,我需要做一些像:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)

但是,我注意到这没有必要(至少在informix 11.5上没有),我可以这样做:

where (A<>B)
Run Code Online (Sandbox Code Playgroud)

如果A和B为NULL,则返回FALSE.如果NULL不等于NULL,那么这不应该返回TRUE吗?

编辑
这些都是很好的答案,但我认为我的问题有点模糊.请允许我改写一下:

鉴于A或B都可以为NULL,是否足以检查它们的不等式

where (A<>B)
Run Code Online (Sandbox Code Playgroud)

或者我需要明确检查它:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)

请参阅此主题以获得此问题的答案.

sql database null nullable

21
推荐指数
3
解决办法
3万
查看次数

java编译器说这个异常永远不会在相应的try语句的主体中抛出 - 但是它被抛出了_is_

我有以下代码:

try {
    //jaw-ws service port operation
    port.login();
} catch (Exception e) {
    logger.error("Caught Exception in login(): " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

当使用不正确的主机名运行上述内容时,我得到:

Caught Exception in login(): HTTP transport error: java.net.UnknownHostException: abc
Run Code Online (Sandbox Code Playgroud)

这是正确和预期的.我重新编写代码以专门捕获UnknownHostException,如下所示:

import java.net.UnknownHostException;
try {
    //jaw-ws service port operation
    port.login();
} catch (UnknownHostException uhe) {
    //do something specific to unknown host exception
} catch (Exception e) {
    logger.error(Caught Exception in login(): " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译它时,我得到:

[javac] foo.java: exception java.net.UnknownHostException is never thrown in body of corresponding try statement …
Run Code Online (Sandbox Code Playgroud)

java exception-handling exception javac try-catch

16
推荐指数
1
解决办法
2万
查看次数

使用可以为null的列测试不等式

所以,今天早上我问了一个问题,我没有正确说出,所以我得到了很多回复,为什么NULL与任何东西相比都会给出NULL/FALSE.

我的实际问题是,对于两个可以为NULL的两列测试不平等的方式,时间是多少.我的问题与这个问题恰恰相反.

要求如下,A和B是两列:
a)如果A和B都是NULL,它们是相等的,返回FALSE
b)如果A和B都不是NULL,则返回A <> B
c) A或B为NULL,它们不相等,返回TRUE

sql database null informix nullable

12
推荐指数
1
解决办法
4481
查看次数

临时表的寿命

我有以下程序:

CREATE PROCEDURE foo ()
    SELECT * FROM fooBar INTO TEMP tempTable;

    -- do something with tempTable here

    DROP TABLE tempTable;
END PROCEDURE;
Run Code Online (Sandbox Code Playgroud)

如果在调用DROP TABLE之前发生异常会发生什么?foo退出后,tempTable还会出现吗?

如果是这样,foo可能会在下次调用时失败,因为tempTable已经存在.应如何处理.

编辑:我正在使用informix 11.5

sql database informix temp-tables

9
推荐指数
2
解决办法
1万
查看次数

更改生成的jaxb类的包

我在wsdl中定义了以下数据类型:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0">
            <xs:simpleType name="MyEnum">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="one"/>
                    <xs:enumeration value="two"/>
                </xs:restriction>
            </xs:simpleType>
            <!-- SNIP other data types -->
        </xs:schema>
    </wsdl:types>
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)

我希望MyEnum落入自己的包中.所以,我使用了一个jaxws绑定文件,并使用XPATH遍历模式和jaxb绑定来设置包,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws">
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']">
      <jxb:schemaBindings>
          <jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace-->
      </jxb:schemaBindings>
      <jxb:bindings node="//xs:simpleType[@name='MyEnum']">
          <jxb:package name="a.b.c"/> <!-- this does not work -->
      </jxb:bindings>
    </jaxws:bindings>
    <!-- SNIP - …
Run Code Online (Sandbox Code Playgroud)

java cxf wsdl2java jax-ws jaxb

9
推荐指数
1
解决办法
9973
查看次数